告别ASPNET操作EXCEL的烦恼(总结篇)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Copy From 告别操作EXCEL的烦恼(总结篇)
公元19XX年前,关于EXCEL的操作就如滔滔江水,连绵不绝,真正操作EXCEL我也是从去年下半年开始的,有些比较复杂的年度报表之类的,做起来也有点费力,不过还是都能画出来了,关于EXCEL的报表导出,考虑到导出耗时的问题我主要采用AJAX来做的,分别捕捉几个起止状态,给客户端提示3个状态:正在检索数据。。。---》准备导出数据。。。(只是从数据库成功取出,还没有读写excel文件)--》正在读写文件--》导出数据成功,当然如果哪一过程出错,都有对应的提示,只所以想到写这篇文章,主要是因为今年有个系统的部分EXCEL的操作也让我做,顺便结合之前操作EXCEL的经验作一下总结,可能也算不上什么,对于绝大多数来说也没什么技术含量,网上一搜一大把,但我想还是有必要总结一下,至少能给园子里的新手些许帮助,OK,Let's Go...
一. 程序操作EXCEL的应用主要还是在统计报表方面,您可能会考虑读EXCEL模板,也可能会考虑没必要读模板,其实读不读模板都能达到一样的效果,看实际情况而用了。
1. 读模板的话,首先模板存放在某个路径下,根据模板把从数据库里取出的数据写回EXCEL然后生成一个新的EXCEL存放都另一个路径以供下载,模板不变。
我这里的EXCEL操作主要是在VS2005里的,VS2003也可以的,不过没怎么研究03里的操作(文章最后我会把05,03的示例下载地址贴上)vs05中操作EXCEL直接引用.NET自带的COM组件
,添加后项目的bin目录下会自动出现
Interop.Excel.dll这个DLL(需安装office2003 excel,下面的说明及示例都是基于office2003的,版本不同调用可能会不一样)
页面的命名空间引用using Excel;
下面是调用模板的一段代码
1#region使用模板导出Excel表
2case"ReportByTemp":
3 {
4
5 DataView dv = Cache["ReportByTemp"] as DataView;
6//建立一个Excel.Application的新进程
7 Excel.Application app =new Excel.Application();
8if (app ==null)
9 {
10return;
11 }
12 app.Visible =false;
13 erControl =true;
14 Workbooks workbooks = app.Workbooks;
15 _Workbook workbook = workbooks.Add(template_path +"\\EXCEL测试模板.xls");//这
里的Add方法里的参数就是模板的路径
16 Sheets sheets = workbook.Worksheets;
17 _Worksheet worksheet = (_Worksheet)sheets.get_Item(1);//模板只有一个sheet表
18if (worksheet ==null)
19 {
20return;
21 }
22
23int rowNum =0;
24for (int i =0; i < span> dv.Count; i++)
25 {
26 rowNum = i +1;
27 worksheet.Cells[3+ i, 1] = rowNum;
28 worksheet.Cells[3+ i, 2] = dv[i].Row[0].T oString();
29 worksheet.Cells[3+ i, 3] = dv[i].Row[1].T oString();
30
31 excelOperate.SetBold(worksheet, worksheet.Cells[3+ i, 1], worksheet.Cells[3+ i, 1]); //黑体
32 excelOperate.SetHAlignCenter(worksheet, worksheet.Cells[3+ i, 1], worksheet.Cells [3+ i, 3]);//居中
33 worksheet.get_Range(worksheet.Cells[3+ i, 1], worksheet.Cells[3+ i, 3]).Borders.Col or = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
34
35 }
36
37 tick = DateTime.Now.Ticks.ToString();
38 save_path = temp_path +"\\"+ tick +".xls";
39 workbook.SaveAs(save_path, Missing.Value, Missing.Value, Missing.Value, Missing.Va lue, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Valu e, Missing.Value, Missing.Value);
40 excelOperate.Dispose(worksheet, workbook, app);//关闭Excel进程
41
42 }
43break;
44#endregion
效果如下: