首页 新闻 会员 周边

关于NPOI制作条形码插入Excel问题

0
悬赏园豆:80 [已解决问题] 解决于 2014-05-23 10:46
 protected void btnSearch_Click(object sender, EventArgs e)
    {

        string reportFile = GenerateJobSheet(BizUnit.GetBarCode());
        //ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "", String.Format("window.navigate('DownloadFile.aspx?path={0}');", Server.UrlEncode(reportFile)), true);


    }
    public string GenerateJobSheet(DataTable tb)
    {
        string reportFile = ReportHelper.CreateFileFromTemplate("~/Reports/JobSheetTemplate.xls", "~/Reports/JobSheet_" + DateTime.Now.Year.ToString() + ".xls");

        HSSFWorkbook workbook;
        using (FileStream fs = new FileStream(reportFile, FileMode.Open, FileAccess.Read))
        {
            workbook = new HSSFWorkbook(fs);
        }

        HSSFSheet worksheet = workbook.GetSheetAt(0);
        //这是循环插入的关键方法
        FillDataXBraCode(worksheet,tb,1,workbook);
        using (FileStream fs = new FileStream(reportFile, FileMode.Create))
        {
            workbook.Write(fs);
        }

        return reportFile;
    }


    ////这是循环插入的方法
    private void FillDataXBraCode(HSSFSheet worksheet, System.Data.DataTable dt, int beginRow, HSSFWorkbook workbook)
    {
        int rowCount = dt.Rows.Count;
        int colCount = dt.Columns.Count;
        string[,] dataArray = new string[rowCount, colCount];
        for (int i = 0; i < rowCount; i++)
        {
            HSSFRow row = null;
            if (beginRow == 2)
                row = worksheet.CreateRow(i + 2);
            else
                row = worksheet.CreateRow(i + 1);

            for (int j = 0; j < colCount; j++)
            {
                dataArray[i, j] = dt.Rows[i][j] == null ? string.Empty : dt.Rows[i][j].ToString();
                HSSFCell cell = row.CreateCell(j);
                //
                if (j == 1)
                {
                    HSSFPatriarch patriarch = worksheet.CreateDrawingPatriarch();
                    string unitNumber = (new BarCodeGenerator()).CreateBarcode("*" + dataArray[i,j] + "*", 20);
                    byte[] bytes1 = System.IO.File.ReadAllBytes(unitNumber);
                    int pictureIdx1 = workbook.AddPicture(bytes1, PictureType.JPEG);

                    HSSFClientAnchor anchor1 = new HSSFClientAnchor(3, 3, 1020, 255, j, i, j, i);
                    HSSFPicture pict1 = patriarch.CreatePicture(anchor1, pictureIdx1);

                    //pict1.Resize();
                    File.Delete(unitNumber);
                }
                else
                {
                    //
                    cell.SetCellValue(dataArray[i, j]);
                }
            }
        }
    }
问题补充:

看上去没有问题调试了 数据也对不过  结果第一行一列为空然后第二列是一张条形码图片第二行一直到最后一行第一列均为要转化成条形码的正常数据但第二列本该显示条形码结果一个也没有 全部为空 求大神告诉我问题出在哪里  

小w威的主页 小w威 | 初学一级 | 园豆:37
提问于:2014-05-20 17:00
< >
分享
最佳答案
0

你这个条形码就是一张图片吧?

具体参考下 http://www.cnblogs.com/zhangliming/archive/2013/04/02/2995655.html#2845838

看下下边的评论

收获园豆:40
平常心队长 | 小虾三级 |园豆:1113 | 2014-05-20 17:06

是的 

小w威 | 园豆:37 (初学一级) | 2014-05-20 17:23

这里已经转换成图片了  我要下班了  到时候可能没法及时回复 不好意思  如果你知道就给我留言放下面把 到时候 我看解决了就给你把分寄过去嘻嘻

小w威 | 园豆:37 (初学一级) | 2014-05-20 17:24

@小w威: 我意思是你看下我这篇文章下边的评论额....应该是NPOI的问题.

平常心队长 | 园豆:1113 (小虾三级) | 2014-05-21 08:45
其他回答(2)
0

可以考虑使用条形码字体,简单,快捷,唯一不爽的就是要在客户端安装字体。

收获园豆:40
Shannon | 园豆:611 (小虾三级) | 2014-05-23 08:34
0

我用了另一个方法了做出来了 不过 这个问题还是有待解决我自己有时间慢慢研究把 不过还是谢谢大家 各给10分谢了

小w威 | 园豆:37 (初学一级) | 2014-05-23 10:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册