想要实现一个导出excel的功能,在COM中添加了Microsoft Excel 12.0 Object Library,然后添加 using excel=Microsoft.Office.Interop.Excel,然后使用语句 var app=excel.ApplicationClass().提示Interop Type "Microsoft.Office.Interop.Excel.ApplicationClass" can't be embedded.
我用的是Framework4.0,机器上安装的是office 2007.求教!
var app = new Microsoft.Office.Interop.Excel.Application();
用文件流去做吧,你这样子一个格子一个格子的会搞死你的,根本用不到什么excel组件
调用execl 组建 在生成的时候 会给服务器增加负担 这个方式是不可取的。
可以用 http方式 直接生成。
1 public void CreateExcel(DataTable dt)
2 {
3 try
4 {
5 string fileName = DateTime.Now.Ticks + EXCELPOSTFIX;
6
7 HttpResponse resp;
8 resp = Page.Response;
9 resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
10 resp.AppendHeader("Content-Disposition", "attachment;filename=" + fileName);
11 string colHeaders = "", ls_item = "";
12
13 //定义表对象与行对象,同时用DataSet对其值进行初始化
14 //DataTable dt = ds.Tables[0];
15
16 DataRow[] myRow = dt.Select();//可以类似dt.Select("id>10")之形式达到数据筛选目的
17 int i = 0;
18 int cl = dt.Columns.Count;
19
20 //取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
21 for (i = 0; i < cl; i++)
22 {
23 if (i == (cl - 1))//最后一列,加n
24 {
25 colHeaders += dt.Columns[i].Caption.ToString() + "\n";
26 }
27 else
28 {
29 colHeaders += dt.Columns[i].Caption.ToString() + "\t";
30 }
31
32 }
33 resp.Write(colHeaders);
34 //向HTTP输出流中写入取得的数据信息
35
36 //逐行处理数据
37 foreach (DataRow row in myRow)
38 {
39 //当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
40 for (i = 0; i < cl; i++)
41 {
42 string rows = CommMoted.cuthtml2(row[i].ToString());//自定义类,去除掉文本中的HTML 样式
43 if (i == (cl - 1))//最后一列,加n
44 {
45 ls_item += rows + "\n";
46 }
47 else
48 {
49 ls_item += rows + "\t";
50 }
51
52 }
53 resp.Write(ls_item);
54 ls_item = "";
55
56 }
57
58 // resp.Write("总计:" + this.lab1.InnerText.Trim() + "列," + this.lab2.InnerText.Trim() + "辆");
59 resp.End();
60 //Response.Write("<script>alert('导出成功!');<script>");
61
62 }
63 catch(Exception ex)
64 {
65 //return "导出失败!" + ex.Message;
66 //Response.Write("<script>alert('导出失败!请检查计算机上是否已安装excel');<script>");
67 }
68 }