清风小子

 

EPPLUS 操作Excel2007 入门实例

目前正在进行excel com访问方式改造,涉及到要操作excel并且不需要在服务器上安装office。经过长时间在网上一通搜索,找到两种评价不错的第三方程序:

1、操作Excel2003 首选NPOI

 Tony Qu在博客里对常用操作进行了详细的语言描述及代码实现。

我在使用过程中发现NPOI操作excel后不知怎样保护工作簿(保护结构和窗口)求解?

实际业务中如果客户新建一个工作表删除已经进行过业务代码签字并且保护的工作表后,那样引发系统没法进行数据的有效性保证。

2、操作Excel2007、2010 首选Epplus

从2007版本后微软用xml的方式实现office的读写,另目前NPOI 1.2 版本没法胜任了。该Epplus版本只是很少有中文帮助资料全部都是英文,或者是零零散散没有形成统一学习的资料。

我在使用过程中发现epplus 插入图片后也进行了锁定并且工作表也保护了,但是这个插入后的图片可以随意拖动操作。不知是我还没有真正领悟如何实现还是?求解

 

下例是我实现excel在线审批进行签字插入签字图片功能(由于电子签章成本巨高,并且是每年都要续高昂的费用)故采用客户签字制成图片插入到excel。

 

  1  /// <summary>
2 ///
3 /// </summary>
4 /// <param name="filePath"></param>
5 /// <param name="newFilePath"></param>
6 /// <returns></returns>
7 public string CreateSignExcel(string filePath, string newFilePath, DataTable dt)
8 {
9 if (File.Exists(newFilePath))
10 File.Delete(newFilePath);
11 FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read);
12 ExcelPackage package;
13 try
14 {
15 package = new ExcelPackage(file);
16 }
17 catch (Exception ext)//如果保护工作簿后就报错System.IO.FileFormatException: 文件包含损坏的数据
18 {
19 return "";
20 }
21 int FileSheet = 0;
22 int firstrownum = 0, maxRowNum = 0, maxColNum = 0;
23 FileSheet = package.Workbook.Worksheets.Count;
24 string str = "";
25 for (int i = 1; i <= FileSheet; i++)
26 {
27 ExcelWorksheet worksheet = package.Workbook.Worksheets[i];
28 //ExcelRange ex = worksheet.SelectedRange;
29 maxRowNum = worksheet.Dimension.End.Row;
30 firstrownum = worksheet.Dimension.Start.Row;
31 maxColNum = worksheet.Dimension.End.Column;
32 //str += " 第" + FileSheet + "工作表" + "列" + worksheet.Dimension.Start.Column + "行" + worksheet.Dimension.Start.Row+ "列" + worksheet.Dimension.End.Column + "行" + worksheet.Dimension.End.Row;
33 //str += "dd" + worksheet.Cells.Address + "00";// +worksheet.Cells.FullAddress;
34 if (maxRowNum < 2)
35 {
36 //锁定单元格
37 worksheet.Protection.SetPassword(SysConfig.ExcelPassWord);
38 continue;
39 }
40
41 maxRowNum += 2;
42 int a = 0;
43 #region 签字
44 for (int k = 0; k < dt.Rows.Count; k++)
45 {
46 if (a == 0)
47 {
48 worksheet.Cells[maxRowNum, 1].Value = dt.Rows[k]["UserDscp"].ToString();
49 worksheet.Cells[maxRowNum, 1, maxRowNum + 3, 1].Merge = true;
50 }
51 else
52 {
53 worksheet.Cells[maxRowNum, 4].Value = dt.Rows[k]["UserDscp"].ToString();
54 worksheet.Cells[maxRowNum, 4, maxRowNum + 3, 4].Merge = true;
55 }
56 string appresulte = dt.Rows[k]["AppResult"].ToString();
57 if (appresulte == string.Empty || appresulte == "NULL")//此时未审核
58 {
59 if (a == 0)
60 {
61 worksheet.Cells[maxRowNum, 2, maxRowNum + 3, 3].Value = "未审核";
62 }
63 else
64 {
65 worksheet.Cells[maxRowNum, 5, maxRowNum + 3, 6].Value = "未审核";
66 }
67 }
68 else
69 {
70 if (appresulte == "2")//拒绝
71 {
72 string apprue = dt.Rows[k]["approvername"].ToString() + "拒绝(" + dt.Rows[k]["appcause"].ToString() + ")";
73 if (a == 0)
74 {
75 worksheet.Cells[maxRowNum, 2, maxRowNum + 3, 3].Value = apprue;
76 }
77 else
78 {
79 worksheet.Cells[maxRowNum, 5, maxRowNum + 3, 6].Value = apprue;
80 }
81 }
82 else
83 {
84 if (dt.Rows[k]["qz"].ToString().Trim() != "" && dt.Rows[k]["qz"].ToString().Trim() != "NULL")//签字同意且存在用户图片
85 {
86 byte[] bytes;
87 bytes = (byte[])dt.Rows[k]["qz"];
88 string filepath = getImageByUserID(bytes, dt.Rows[k]["approver"].ToString());
89 FileInfo fileimage= new FileInfo(filepath);
90 ExcelPicture pic = worksheet.Drawings.AddPicture("pic" + (k).ToString(), fileimage);
91
92 if (a == 0)
93 {
94 pic.SetPosition(maxRowNum,0,2,0);
95 pic.SetSize(120, 60);
96 //pic.From.Row = maxRowNum;
97 //pic.From.Column = 2;
98 //pic.From.Row = maxRowNum+2;
99 //pic.From.Column = 3;
100 pic.Locked = true;
101 }
102 else
103 {
104 pic.SetPosition(maxRowNum,0,5,0);
105 pic.SetSize(120,60);
106 //pic.From.Row = maxRowNum;
107 //pic.From.Column = 5;
108 //pic.From.Row = maxRowNum + 2;
109 //pic.From.Column = 6;
110 pic.Locked = true;
111 }
112 }
113 else
114 {
115 string apprue = dt.Rows[k]["approvername"].ToString() + "同意(" + dt.Rows[k]["appcause"].ToString() + ")";
116 if (a == 0)
117 {
118 worksheet.Cells[maxRowNum, 2, maxRowNum + 3, 3].Value = apprue;
119 }
120 else
121 {
122 worksheet.Cells[maxRowNum, 5, maxRowNum + 3, 6].Value = apprue;
123 }
124 }
125 }
126 }
127 if (a == 0)
128 {
129 a = 1;
130 }
131 else
132 {
133 a = 0;
134 maxRowNum += 4;
135 }
136 }
137 #endregion
138 worksheet.Protection.SetPassword(SysConfig.ExcelPassWord);
139 }
140 package.Workbook.Protection.LockStructure = true;
141 //package.Workbook.Protection.LockWindows = true;
142 package.Workbook.Protection.SetPassword(SysConfig.ExcelPassWord);
143 FileInfo newFile = new FileInfo(newFilePath);
144 package.SaveAs(newFile);
145 package.Dispose();
146 file.Close();
147 file.Dispose();
148 return str;
149 }



posted on 2012-02-15 17:03  清风小子888  阅读(2683)  评论(0编辑  收藏  举报

导航