zoukankan      html  css  js  c++  java
  • .Net core_Excel 导出二维码(以导出箱单为例)


    [AccessLogAttribute(Note = "导出条形码箱单 — 条形码")]
    public ActionResult ExportContract(string INNER_NO)
    {

    try
    {
    string export = "条形码箱单.xls";
    CommonResult cr = new CommonResult();
    DataSet ds = new DataSet();

    //获得表头数据  
    DataTable dtHead1 = new DataTable();

    //获得方法  具体参数可以根据需要传
    dtHead1 = tab1Servcie.QRGetInvoiceFirstHead(INNER_NO, CurrentCorporation.SITE);

    //获得表体数据
    DataTable dtList1 = new DataTable();
    dtList1 = tab1Servcie.QRGetInvoiceFirstList(INNER_NO, CurrentCorporation.SITE);
    ds.Tables.Add(dtHead1);
    ds.Tables.Add(dtList1);

    //导出(需要配置XML)
    ds.Tables[0].TableName = "Export_Invoice_QR_HEAD";
    ds.Tables[1].TableName = "Export_Invoice_QR_LIST";
    Dictionary<string, List<ExportItem>> dicMapping = FileHelper.GetMappingDictionary(this, "WExport.xml", false, "Export_Invoice_QR");
    Dictionary<string, string> dicSheetName = new Dictionary<string, string>();
    dicSheetName.Add("Export_Invoice_QR", "装箱单");
    return Step3(export.Substring(0, export.Length - 4), ds, dicMapping, dicSheetName, GetFilePhysicalPath("/Content/ExportTemplate/Dec/" + export, false), INNER_NO);
    }
    catch (Exception e)
    {
    CommonResult cr = new CommonResult();
    cr.ErrorMessage = e.Message;
    return Json(cr);
    }
    }

    /// <summary>
    /// 打印二维码
    /// </summary>
    /// <param name="fileName"></param>
    /// <param name="ds"></param>
    /// <param name="dicMapping"></param>
    /// <param name="dicSheetName"></param>
    /// <param name="tempaltePath"></param>
    /// <param name="inner_no">内部编号(数据的标识编号)</param>
    /// <returns></returns>
    public ActionResult Step3(string fileName, DataSet ds, Dictionary<string, List<ExportItem>> dicMapping, Dictionary<string, string> dicSheetName, string tempaltePath, string inner_no)
    {
    string path1 = "";
    CommonResult commonResult = new CommonResult();
    try
    {
    //地址
    string a = Path.GetExtension(tempaltePath);
    commonResult.ErrorMessage = NPOIHelper.SaveExcel(fileName, NPOIHelper.ExportToMemoryStream(ds, dicMapping, dicSheetName, tempaltePath, false), Path.GetExtension(tempaltePath));
    commonResult.Success = true;
    commonResult.Data1 = AppDomain.CurrentDomain.BaseDirectory + commonResult.ErrorMessage;
    path1 = commonResult.Data1;
    commonResult.ErrorMessage = BaseController.Host + BaseController.ApplicationPath + commonResult.ErrorMessage;
    FileStream file = new FileStream(@commonResult.Data1, FileMode.Open, FileAccess.ReadWrite);
    HSSFWorkbook excelBook = new HSSFWorkbook(file);
    ISheet sheet = excelBook.GetSheet("装箱单");
    List<PIDMSHNotifyThird> lists = tab1Servcie.GetThirdList(inner_no, CurrentCorporation.SITE);
    //拆分 生产日期 生产批号 数量
    Image image;
    int width =200, height = 60;
    int lastRow = lists.Count * 30;
    for (int k = 0; k < lastRow; k++)
    {

    //创建行 (如果不创建会出现二维码积压覆盖) 
    IRow row = sheet.CreateRow(28 + k); //创建行对象 --注意这点
    row.HeightInPoints = (float)(0.91 * 15.00);

    for (int line = 0; line < 13; line++)
    {
    ICell cell1 = row.CreateCell(line); //在第二行中创建单元格
    ICellStyle style = excelBook.CreateCellStyle();
    }
    }

    //自适应界面
    //for (int i = 0; i < lists.Count; i++)
    //{
    // int _Row = 16;
    // int currLine = _Row + i * 4;
    // int rowCount = sheet.LastRowNum;
    // if (i % 9 == 0 && i != 0)
    // {
    // currLine = currLine + 4;
    // }
    // excelBook.SetPrintArea(0, 0, 10, 0, 30);
    // //是否自适应界面
    // sheet.FitToPage = false;
    //}
    excelBook.SetPrintArea(0, 0, 10, 0, lastRow);
    //是否自适应界面
    sheet.FitToPage = false;
    int result = 28;

    for (int i = 0; i < lists.Count; i++)
    {
    string[] strCount = null;
    if (lists[i].NET_WT_SEP!=null)
    {
    strCount = lists[i].NET_WT_SEP.Split(','); //数量分批
    }
    string[] strNo = null;
    if (lists[i].PROD_BATCH_NO_SEP!=null)
    {
    strNo = lists[i].PROD_BATCH_NO_SEP.Split(','); //生产批号分批
    }
    string[] strDate = null;
    if (lists[i].PRODUCE_DATE!=null)
    {
    strDate = lists[i].PRODUCE_DATE.Split(','); //生产日期分批
    }

    if (strCount.Length== strNo.Length&& strNo.Length== strDate.Length&& strNo.Length!=0 && strDate!=null && strNo != null && strCount != null)
    {

    for (int j = 0; j < strCount.Length; j++)
    {
    //[Display(Name = "客户货号")]
    //public string NOTE { get; set; }
    if (lists[i].NOTE != null)
    {
    byte[] note = GetBarcode(height, width, BarcodeLib.TYPE.CODE128, lists[i].NOTE, out image);
    sheet.GetRow((j+1) * 4 + result).GetCell(1).SetCellValue(lists[i].NOTE);
    int pictureIdx = excelBook.AddPicture(note, PictureType.PNG);
    HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
    HSSFClientAnchor anchor = new HSSFClientAnchor(100, 50, 950, 0, 0, result+1 + (j + 1) * 4, 2, result+3 + (j + 1) * 4);
    HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
    }

    // string[] strNo = lists[i].PROD_BATCH_NO_SEP.Split(','); //生产批号分批
    if (strNo[j]!= null)
    {
    byte[] prod = GetBarcode(height, width, BarcodeLib.TYPE.CODE128, strNo[j], out image);
    sheet.GetRow((j + 1) * 4 + result).GetCell(4).SetCellValue(strNo[j]);
    int pictureIdx1 = excelBook.AddPicture(prod, PictureType.PNG);
    HSSFPatriarch patriarch1 = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
    HSSFClientAnchor anchor1 = new HSSFClientAnchor(300, 50, 900, 0, 3, result + 1+ (j + 1) * 4, 5, result + 3 + (j + 1) * 4);
    HSSFPicture pict1 = (HSSFPicture)patriarch1.CreatePicture(anchor1, pictureIdx1);
    }

    // string[] strCount = lists[i].NET_WT_SEP.Split(','); //数量分批
    if (strCount[j] != null)
    {
    byte[] net_no = GetBarcode(height, width, BarcodeLib.TYPE.CODE128, strCount[j], out image);
    sheet.GetRow((j + 1) * 4 + result).GetCell(6).SetCellValue(strCount[j]);
    int pictureIdx2 = excelBook.AddPicture(net_no, PictureType.PNG);
    HSSFPatriarch patriarch2 = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
    HSSFClientAnchor anchor2 = new HSSFClientAnchor(300, 50, 500, 0, 6, result + 1 + (j + 1) * 4, 7, result + 3 + (j + 1) * 4);
    HSSFPicture pict2 = (HSSFPicture)patriarch2.CreatePicture(anchor2, pictureIdx2);
    }

    // string[] strDate = lists[i].PRODUCE_DATE.Split(','); //生产日期分批
    if (strDate[j] != null)
    {
    byte[] prodce = GetBarcode(height, width, BarcodeLib.TYPE.CODE128, strDate[j], out image);
    sheet.GetRow((j + 1) * 4 + result).GetCell(9).SetCellValue(strDate[j]);
    int pictureIdx3 = excelBook.AddPicture(prodce, PictureType.PNG);
    HSSFPatriarch patriarch3 = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
    HSSFClientAnchor anchor3 = new HSSFClientAnchor(300, 50, 500, 0, 8, result + 1 + (j + 1) * 4, 10, result + 3 + (j + 1) * 4);
    HSSFPicture pict3 = (HSSFPicture)patriarch3.CreatePicture(anchor3, pictureIdx3);
    }
    if (j+1== strCount.Length)
    {
    result = result + (j + 1) * 4;
    }

    }
    }
    }

    string FileN = "/Temp/Export/" + fileName + CommonHelper.GetGuid() + ".xls";
    string path = AppDomain.CurrentDomain.BaseDirectory + FileN;
    commonResult.Data1 = path;
    commonResult.ErrorMessage = BaseController.Host + BaseController.ApplicationPath + FileN;
    FileStream files = new FileStream(@path, FileMode.Append);
    excelBook.Write(files);
    //释放文件流
    file.Close();
    file.Dispose();
    files.Close();
    files.Dispose();
    }
    catch (Exception ex)
    {
    commonResult.ErrorMessage = ex.Message;
    }
    finally
    {

    }
    return base.Json(commonResult, 0);
    }

    static byte[] GetBarcode(int height, int width, TYPE type, string code, out Image image)
    {
    image = null;
    Barcode b = new Barcode();
    b.BackColor = Color.White;
    b.ForeColor = Color.Black;
    b.IncludeLabel = false;
    b.Alignment = AlignmentPositions.CENTER;
    b.LabelPosition = LabelPositions.BOTTOMCENTER;
    b.ImageFormat = ImageFormat.Jpeg;
    Font font = new Font("verdana", 10f);
    b.LabelFont = font;
    b.Height = height;
    b.Width = width;
    b.Encode(type, code);
    byte[] buffer = b.GetImageData(SaveTypes.JPG);
    return buffer;
    }

  • 相关阅读:
    【转】我该 不该学习VULKAN
    游戏开发内功秘籍记录
    VS 配置外部DLL的引用路径【可执行文件的环境路径】
    OpenGL3.x,4.x中使用FreeImage显示图片的BUG-黑色,或颜色分量顺序错乱
    C++风格与C风格文件读写效率测试-vs2015,vs2017
    【转】矩阵的几何解释
    android 线程间通信
    android 网络
    安卓 碎片 如何实现类似 活动 栈的 进栈 出栈
    安卓 内容提供者 观察者 解析器
  • 原文地址:https://www.cnblogs.com/ning-xiaowo/p/11898766.html
Copyright © 2011-2022 走看看