如何快速将DataTable中的数据保存到Excel

遇到的问题
① 保存到Excel的时间比较长,用户体验差
② 保存失败(原因:Excel程序打开;或前一次调用Excel线程没有关闭,等)

开发环境

① 开发工具:VS2010
② .NET框架: 3.5
③调用的DLL :Microsoft.Office.Interop.Excel.dll
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200510205417339.png#pic_center)
需要在引用中“”添加引用

具体代码

 private void SaveDataToExcel(DataTable dt){string tempName = DateTime.Now.ToString("yyyyMMddHHmm") + ".xls";  //创建Excel的文件名字string filePath = "";Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();Microsoft.Office.Interop.Excel.Workbook wBook = null;Microsoft.Office.Interop.Excel._Worksheet wSheet = null;Microsoft.Office.Interop.Excel.Range range = null;if (app == null){throw new Exception("无法创建Excel对象");}filePath = Application.StartupPath + DateTime.Now.ToString("yyyyMMdd"); //在应用程序目录下 创建一个当前日期的文件夹if (!Directory.Exists(filePath)){//创建文件夹Directory.CreateDirectory(filePath);}try{app.Visible = false;wBook = app.Workbooks.Add(true);wSheet = (Microsoft.Office.Interop.Excel._Worksheet)wBook.Sheets[1];object[,] objData = new object[dt.Rows.Count + 1, dt.Columns.Count + 1];for (int i = 0; i < dt.Columns.Count; i++){//首先将数据写入到一个二维数组中objData[0, i] = dt.Columns[i].Caption;  //写入列标题}if (dt.Rows.Count > 0){for (int i = 0; i < dt.Rows.Count; i++){for (int j = 0; j < dt.Columns.Count; j++)  //写入内容{if (dt.Rows[i][j].Equals(float.NaN)){objData[i + 1, j] = "-";}else{objData[i + 1, j] = dt.Rows[i][j];}}}}string startCol = "A";  //这里关键, 计算要替换第二区域int iCnt = (dt.Columns.Count - 1) / 26;string endColSignal = ((iCnt == 0) ? "" : ((char)('A' + (iCnt - 1))).ToString());string endCol = endColSignal + ((char)('A' + dt.Columns.Count - iCnt * 26 - 1)).ToString();range = wSheet.get_Range(startCol + "1", endCol + (dt.Rows.Count + 1).ToString());range.Value2 = objData;  //给Excel中的Range整体赋值range.EntireColumn.AutoFit();  //设定Excel列宽度自适应range.Font.Size = 9;range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;//居中range.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;//设置边框  range.Borders.Weight = Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin;//边框常规粗细  wSheet.get_Range(startCol + "1", endCol + "1").Font.Bold = 1; //Excel文件列名 字体设定为Bold//设置禁止弹出保存和覆盖的询问 提示框app.DisplayAlerts = false;app.AlertBeforeOverwriting = false;wSheet.SaveAs(filePath + "\\" +  tempName);wBook.Close();}catch (Exception ex){MessageBox.Show("导出Excel出错!原因是:" + ex.Message);}finally{System.Runtime.InteropServices.Marshal.ReleaseComObject(wBook);System.Runtime.InteropServices.Marshal.ReleaseComObject(wSheet);System.Runtime.InteropServices.Marshal.ReleaseComObject(range);System.Runtime.InteropServices.Marshal.ReleaseComObject(app);wBook = null;wSheet = null;range = null;//app.Quit();app = null;GC.Collect();  //前提是:所有对象=null后才能调用此函数,然后才会结束exce在资源管理器中的进程。}}

这个方法可以快速将数据保存到Excel。使用的.NET框架不同,SaveAs函数可能也会不同,形参可能不一样。(PS:也可能是开发工具版本不同导致的)

 wSheet.SaveAs(filePath + "\\" +  tempName);

文章描述的方法是参考他人的一篇博客,具体链接后面补上。

将DataTable中的数据保存到Excel相关推荐

  1. 将DataTable中的数据保存到Excel (二) 使用NPOI

    文章目录 背景 1 NPOI 简介 2 使用NPOI 2.1 创建一个简单的工作簿 2.2 简单的读取内容 2.3 将DataTable数据导出到Excel(NPOI) 2.4 Excel(NPOI) ...

  2. Scrapy中将数据保存到Excel和MySQL中

    目录标题 1. Excel 1.1 openpyxl 1.1.1 代码说明 1.1.2 注意 1.2 pandas 1.2.1 代码说明 1.2.2 常见错误 1.3 openpyxl和pandas对 ...

  3. 【Arduino串口数据保存到excel中常用三种方法】

    [Arduino串口数据保存到excel中常用三种方法] 1. 前言 2. 利用excel自带Data Streamer读取 2.1 启用 Data Streamer 加载项 2.2 刷写代码并将微控 ...

  4. 如何将网页内容保存到计算机中,如何将网站导出excel表格数据-如何把网页数据保存到EXCEL...

    网页上的表格数据怎么复制到excel 1.打开excel表格. 2.打开菜单"数据->"导入外部数据"->"新建 Web 查询",在&qu ...

  5. JAVA中将数据保存到EXCEL文件

    java后端将数据库中数据或前端传来的数据保存到EXCEL文件中.代码中有详细注解. 依赖包 <dependency><groupId>org.apache.poi</g ...

  6. 将爬取的数据保存到Excel表格

    第一步.导入模块 import xlwt # 导入写入excel需要的包 第二步.定义函数,将爬取好的数据保存到excel文件中,下面以保存python的关键词为例,介绍详细流程. def write ...

  7. Python--爬虫爬取的数据保存到excel

    Python–爬虫爬取的数据保存到excel 文章目录 Python--爬虫爬取的数据保存到excel 一.excel表格存储 二.python3.9没有自带的xlwt模块和xlrd,需要自行下载 三 ...

  8. asp.net学习笔记·将数据库中的数据保存在EXCEL文件中

    提取数据库中的数据,将其保存在EXCEL文件中,并提供下载. 在一般处理程序中将数据库数据保存在EXCEL文件中的代码 using System; using System.Collections.G ...

  9. aspx页面中,DataTable中的数据导出到Excel文件中

    方法一:直接将DataTable中的数据通过GridView导出到Excel中,并显示下载界面 public void ExportToExcel(DataTable tab,string filen ...

最新文章

  1. junit 单元测试 - 参数化测试
  2. oracle中字符串的脚本表示什么意思,sql脚本中rem与prompt,define等的含义
  3. Qt Creator调试器故障排除
  4. hibernate正向生成数据库表以及配置——Teacher.java
  5. 弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星
  6. 真的很OK!雷军成科创板大赢家 相关投资企业3家已上市
  7. 随想录(学习wrk的代码)
  8. 酒的基金降幅较大,这是为什么?
  9. Cisco基本必须掌握命令
  10. 【Golang】关于从切片中删除某个元素时会覆盖底层数组的说明
  11. 基于vue+ts实现的svg可视化web组态编辑器
  12. VMware ESXI虚拟机修改MAC地址的方法
  13. hackinglab-脚本关10——基情燃烧的岁月
  14. 码农翻身全年文章精华
  15. python好学吗一般要学多久-python好学吗
  16. 怎样取消开机硬盘自检?
  17. C语言execvp实现简易Shell的两种方法
  18. echarts,x轴y轴,配置参数详情
  19. python葡萄酒数据_用python进行葡萄酒质量预测
  20. Abaqus模拟偏心受压钢管混凝土柱计算受压承载力

热门文章

  1. Nginx 负载均衡演示之 upstream 参数 location 参数
  2. 使用FastStone Capture进行长截图(滚动截图)
  3. Python 获得13位unix时间戳
  4. 【pandas】将 列表写入dataframe里的某一个单元格
  5. 准确率、精确率、召回率、F1-measure
  6. 为php设置系统变量、环境变量
  7. SEO面试知识点与工作内容技巧
  8. 微信支付APPID MCHID APIKEY等配置方法
  9. 自动间隔截图 matlab,自动间隔截图 MultiScreenshots
  10. 北京联通20M宽带|覆盖35%