.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;
        }
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号