schangxiang@126.com
2025-09-09 3d8966ba2c81e7e0365c8b123e861d18ee4f94f5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
 
using iWareCommon.Utils;
using OfficeOpenXml;
using OfficeOpenXml.Drawing;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
 
namespace autuPrint.printService
{
    public class creatExcelPrint
    {
        //1.cd C:\Windows\Microsoft.NET\Framework\v4.0.30319
        //2.InstallUtil.exe  D:\wms\checkDebug\Debug\siemensSapService.exe 找到自己的服务地址
        //启动服务 net start IWareCC
        //停止服务 net stop  IWareCC
        //卸载服务 sc delete IWareCC
        /// <summary>
        /// //线程锁防止并发
        /// </summary>
        private static Mutex single = new Mutex();
        /// <summary>
        /// 生成打印数据源
        /// </summary>
        /// <param name="img">条形码</param>
        ///   <param name="label">标签参数</param>
        /// <returns>成功返回true</returns>
        public static bool creatEXcel(Image img, labelEntity label, string baCode)
        {
            if (single.WaitOne())//增加线程锁防止双击并发
            {
 
                try
                {
                    #region 验证模板文件是否存在
                    if (!File.Exists(@"C:\autoPrint\标签模板.xlsx"))
                    {
                        Log4NetHelper.WriteErrorLog(LogType.Print, "类名: creatExcelPrint 方法名: creatEXcel 模板缺失", null);
                        return false;
 
                    }
                    if (img == null)
                    {
                        Log4NetHelper.WriteErrorLog(LogType.Print, "类名: creatExcelPrint 方法名: creatEXcel 标签条形码为空", null);
                        return false;
                    }
                    if (label == null)
                    {
                        Log4NetHelper.WriteErrorLog(LogType.Print, "类名: creatExcelPrint 方法名: creatEXcel 标签参数为空", null);
                        return false;
                    }
                    #endregion
                    //获取模板文件
                    FileInfo copyFile = new FileInfo(@"C:\autoPrint\标签模板.xlsx");
                    copyFile.CopyTo(@"D:\临时.xlsx", true);
                    FileInfo existingFile = new FileInfo(@"D:\临时.xlsx");
                    using (ExcelPackage package = new ExcelPackage(existingFile))
                    {
                        //获取模板内容
                        ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"];
                        worksheet.Cells[2, 3].Value = baCode;//条形号码
                        worksheet.Cells[3, 2].Value = label.purchaseOrder;//采购单号
                        worksheet.Cells[3, 4].Value = label.purchaseOrderItem;//采购项号
                        worksheet.Cells[4, 2].Value = label.materailCode;//物料单号
                        worksheet.Cells[4, 4].Value = label.trackNumber;//跟踪号
                        worksheet.Cells[5, 2].Value = label.materarilName;//物料名称
                        worksheet.Cells[6, 2].Value = label.quantity;//数量
                        worksheet.Cells[6, 4].Value = label.Unit;//库存单位
                        worksheet.Cells[7, 2].Value = label.saleCode;//销售单号
                        worksheet.Cells[7, 4].Value = label.saleCodeItem;//销售项号
                        worksheet.Cells[8, 2].Value = label.receivDate;//收货日期
                        worksheet.Cells[8, 4].Value = label.expireDate;//到期日期
                        worksheet.Cells[9, 2].Value = label.supplierName;//供应商名称
                        ExcelPicture pic = worksheet.Drawings.AddPicture("barCode", img);//插入图片
                        pic.SetSize(180, 35);//设置图片尺寸
                        pic.SetPosition(0, 5, 2, 5);//设置图片位置,以单元格为单位(参数1,3行和列,2,4是偏移量)
                        package.Save();//保存
                    }
                }
                catch (Exception ex)
                {
                    Log4NetHelper.WriteErrorLog(LogType.Print, "类名: creatExcelPrint 方法名: creatEXcel 生成打印文件出错 \r\n  " + ex.ToString(), ex);
                    return false;
                }
                finally { single.ReleaseMutex(); }//一轮结束
            }
            return true;
        }
    }
}