您的位置:首页 > 其它

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。

/// <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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: