EPPLUS 操作Excel2007 入门实例
2012-02-15 17:03
274 查看
目前正在进行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、操作Excel2003 首选NPOI
Tony Qu在博客里对常用操作进行了详细的语言描述及代码实现。
我在使用过程中发现NPOI操作excel后不知怎样保护工作簿(保护结构和窗口)求解?
实际业务中如果客户新建一个工作表删除已经进行过业务代码签字并且保护的工作表后,那样引发系统没法进行数据的有效性保证。
2、操作Excel2007、2010 首选Epplus
从2007版本后微软用xml的方式实现office的读写,另目前NPOI 1.2 版本没法胜任了。该Epplus版本只是很少有中文帮助资料全部都是英文,或者是零零散散没有形成统一学习的资料。
我在使用过程中发现epplus 插入图片后也进行了锁定并且工作表也保护了,但是这个插入后的图片可以随意拖动操作。不知是我还没有真正领悟如何实现还是?求解
下例是我实现excel在线审批进行签字插入签字图片功能(由于电子签章成本巨高,并且是每年都要续高昂的费用)故采用客户签字制成图片插入到excel。
/// <summary> /// /// </summary> /// <param name="filePath"></param> /// <param name="newFilePath"></param> /// <returns></returns> public string CreateSignExcel(string filePath, string newFilePath, DataTable dt) { if (File.Exists(newFilePath)) File.Delete(newFilePath); FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read); ExcelPackage package; try { package = new ExcelPackage(file); } catch (Exception ext)//如果保护工作簿后就报错System.IO.FileFormatException: 文件包含损坏的数据 { return ""; } int FileSheet = 0; int firstrownum = 0, maxRowNum = 0, maxColNum = 0; FileSheet = package.Workbook.Worksheets.Count; string str = ""; for (int i = 1; i <= FileSheet; i++) { ExcelWorksheet worksheet = package.Workbook.Worksheets[i]; //ExcelRange ex = worksheet.SelectedRange; maxRowNum = worksheet.Dimension.End.Row; firstrownum = worksheet.Dimension.Start.Row; maxColNum = worksheet.Dimension.End.Column; //str += " 第" + FileSheet + "工作表" + "列" + worksheet.Dimension.Start.Column + "行" + worksheet.Dimension.Start.Row+ "列" + worksheet.Dimension.End.Column + "行" + worksheet.Dimension.End.Row; //str += "dd" + worksheet.Cells.Address + "00";// +worksheet.Cells.FullAddress; if (maxRowNum < 2) { //锁定单元格 worksheet.Protection.SetPassword(SysConfig.ExcelPassWord); continue; } maxRowNum += 2; int a = 0; #region 签字 for (int k = 0; k < dt.Rows.Count; k++) { if (a == 0) { worksheet.Cells[maxRowNum, 1].Value = dt.Rows[k]["UserDscp"].ToString(); worksheet.Cells[maxRowNum, 1, maxRowNum + 3, 1].Merge = true; } else { worksheet.Cells[maxRowNum, 4].Value = dt.Rows[k]["UserDscp"].ToString(); worksheet.Cells[maxRowNum, 4, maxRowNum + 3, 4].Merge = true; } string appresulte = dt.Rows[k]["AppResult"].ToString(); if (appresulte == string.Empty || appresulte == "NULL")//此时未审核 { if (a == 0) { worksheet.Cells[maxRowNum, 2, maxRowNum + 3, 3].Value = "未审核"; } else { worksheet.Cells[maxRowNum, 5, maxRowNum + 3, 6].Value = "未审核"; } } else { if (appresulte == "2")//拒绝 { string apprue = dt.Rows[k]["approvername"].ToString() + "拒绝(" + dt.Rows[k]["appcause"].ToString() + ")"; if (a == 0) { worksheet.Cells[maxRowNum, 2, maxRowNum + 3, 3].Value = apprue; } else { worksheet.Cells[maxRowNum, 5, maxRowNum + 3, 6].Value = apprue; } } else { if (dt.Rows[k]["qz"].ToString().Trim() != "" && dt.Rows[k]["qz"].ToString().Trim() != "NULL")//签字同意且存在用户图片 { byte[] bytes; bytes = (byte[])dt.Rows[k]["qz"]; string filepath = getImageByUserID(bytes, dt.Rows[k]["approver"].ToString()); FileInfo fileimage= new FileInfo(filepath); ExcelPicture pic = worksheet.Drawings.AddPicture("pic" + (k).ToString(), fileimage); if (a == 0) { pic.SetPosition(maxRowNum,0,2,0); pic.SetSize(120, 60); //pic.From.Row = maxRowNum; //pic.From.Column = 2; //pic.From.Row = maxRowNum+2; //pic.From.Column = 3; pic.Locked = true; } else { pic.SetPosition(maxRowNum,0,5,0); pic.SetSize(120,60); //pic.From.Row = maxRowNum; //pic.From.Column = 5; //pic.From.Row = maxRowNum + 2; //pic.From.Column = 6; pic.Locked = true; } } else { string apprue = dt.Rows[k]["approvername"].ToString() + "同意(" + dt.Rows[k]["appcause"].ToString() + ")"; if (a == 0) { worksheet.Cells[maxRowNum, 2, maxRowNum + 3, 3].Value = apprue; } else { worksheet.Cells[maxRowNum, 5, maxRowNum + 3, 6].Value = apprue; } } } } if (a == 0) { a = 1; } else { a = 0; maxRowNum += 4; } } #endregion worksheet.Protection.SetPassword(SysConfig.ExcelPassWord); } package.Workbook.Protection.LockStructure = true; //package.Workbook.Protection.LockWindows = true; package.Workbook.Protection.SetPassword(SysConfig.ExcelPassWord); FileInfo newFile = new FileInfo(newFilePath); package.SaveAs(newFile); package.Dispose(); file.Close(); file.Dispose(); return str; }
相关文章推荐
- EPPLUS 操作Excel2007 入门实例
- Erlang入门:服务进程实例操作与练习3
- javascript JSON操作入门实例
- MongoDB快速入门笔记(四)之MongoDB查询文档操作实例代码
- MongoDB入门教程之C#驱动操作实例
- MongoDB入门教程之C#驱动操作实例
- Redis入门与Java用Jedis操作Redis实例
- Javascript入门学习第七篇 js dom实例操作第1/2页
- spark入门知识讲解和基础数据操作编程(统一用scala编程实例)
- java操作mysql入门代码实例(含插入、更新和查询)
- Javascript入门学习第七篇 js dom实例操作第1/2页
- MongoDB快速入门笔记(四)之MongoDB查询文档操作实例代码
- Python中操作MySQL入门实例
- 实例讲解mysql入门基本操作语句
- Erlang入门:进程实例操作与练习1
- Erlang入门:gen_server实例操作与练习1
- javascript JSON操作入门实例
- Erlang入门:进程实例操作与练习2
- Erlang入门:进程实例操作与练习3(选修)
- Java BufferedInputStream与BufferedOutputStream 入门版实例解析【文件操作】