博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DataTable Excel
阅读量:4550 次
发布时间:2019-06-08

本文共 3718 字,大约阅读时间需要 12 分钟。

这里是使用Microsoft.Office.Interop.Excel类进行Excel表格操作,核心代码就这些了。麻烦的是服务器上的一些关于access的权限配置。             

string file = System.AppDomain.CurrentDomain.BaseDirectory + "对账单\\" + filename;                if (ExcelHelper.DataTableToCSV(dt, file + System.Web.HttpContext.Current.Session["us_Name"] + ".csv", new string[] { "rowId" }))                {                    HttpResponse resp;                    resp = System.Web.HttpContext.Current.Response;                    resp.Clear();                    resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");                    resp.ContentType = "application/vnd.ms-excel";                    resp.Charset = "GB2312";                    resp.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(filename, Encoding.UTF8) + ".csv");                    resp.WriteFile(file + System.Web.HttpContext.Current.Session["us_Name"] + ".csv");                }

 

public static bool DataTableToCSV(System.Data.DataTable excelTable, string filePath,string[] removeFileds)        {            Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.ApplicationClass();            app.Visible = false;            Workbooks workBooks = app.Workbooks; //创建Excel工作簿            Workbook wBook = workBooks.Add(XlWBATemplate.xlWBATWorksheet);            Worksheet wSheet = wBook.Worksheets[1] as Worksheet;            foreach (string item in removeFileds)            {                if (excelTable.Columns.Contains(item))                {                    excelTable.Columns.Remove(item);                }            }            try            {                if (excelTable.Rows.Count > 0)                {                    int row = 0;                    row = excelTable.Rows.Count;                    int col = excelTable.Columns.Count;                    //关键性代码,直接关系到性能问题
            Array arr = Array.CreateInstance(typeof(String), row, col);                    for (int i = 0; i < row; i++)                    {                        for (int j = 0; j < col; j++)                        {                            arr.SetValue(excelTable.Rows[i][j].ToString(), i, j);                        }                    }                    Microsoft.Office.Interop.Excel.Range range = wSheet.get_Range(wSheet.Cells[2, 1], wSheet.Cells[row + 1, col]);                    range.Value2 = arr;                 }                int size = excelTable.Columns.Count;                for (int k = 0; k < size; k++)                {                    wSheet.Cells[1, 1 + k] = excelTable.Columns[k].ColumnName;                    Range xlsRang = (Range)wSheet.Cells[1, 1 + k];                    xlsRang.EntireColumn.AutoFit();                }                //设置禁止弹出保存和覆盖的询问提示框                   app.DisplayAlerts = false;                app.AlertBeforeOverwriting = false;                //保存工作簿                   wBook.Save();                wBook.SaveCopyAs(filePath); //自定义保存的文件名称            }            catch (Exception err)            {                return false;            }            finally            {                workBooks.Close(); //关闭工作簿                if (app != null)                {                    app.Workbooks.Close();                    app.Quit(); //退出Excel                    int intGenerate = System.GC.GetGeneration(app);                    System.Runtime.InteropServices.Marshal.ReleaseComObject(app); //将XLSAPP从内存托管堆中移除                    app = null;                    System.GC.Collect(intGenerate);                }                GC.Collect(); //强行退出Excel                app = null;            }            return true;        }

 

转载于:https://www.cnblogs.com/diulela/archive/2011/12/13/2285833.html

你可能感兴趣的文章
Vim 编辑器
查看>>
js跳转页面方法大全
查看>>
别名节点aliases
查看>>
BZOJ-10-1176: [Balkan2007]Mokia-CDQ第二类应用
查看>>
[C++]线性链表之顺序表<一>
查看>>
操作系统学习
查看>>
常用free文献数据库
查看>>
题目2
查看>>
js创建对象的方式 三种
查看>>
elementUI vue v-model的修饰符
查看>>
数组复制:关于java中引用传递的一个例子
查看>>
第九周PSP
查看>>
红帽linux忘记root密码的配置
查看>>
JS十进制转二进制(控制位数)
查看>>
Spark源码分析 – SparkContext
查看>>
tabBar选择不同item设置标题不同颜色
查看>>
机器学习算法一览图
查看>>
【BZOJ】3309: DZY Loves Math 莫比乌斯反演优化
查看>>
luogu1972:HH的项链
查看>>
矩形面积
查看>>