将DataTable中的数据保存到Excel
如何快速将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相关推荐
- 将DataTable中的数据保存到Excel (二) 使用NPOI
文章目录 背景 1 NPOI 简介 2 使用NPOI 2.1 创建一个简单的工作簿 2.2 简单的读取内容 2.3 将DataTable数据导出到Excel(NPOI) 2.4 Excel(NPOI) ...
- 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对 ...
- 【Arduino串口数据保存到excel中常用三种方法】
[Arduino串口数据保存到excel中常用三种方法] 1. 前言 2. 利用excel自带Data Streamer读取 2.1 启用 Data Streamer 加载项 2.2 刷写代码并将微控 ...
- 如何将网页内容保存到计算机中,如何将网站导出excel表格数据-如何把网页数据保存到EXCEL...
网页上的表格数据怎么复制到excel 1.打开excel表格. 2.打开菜单"数据->"导入外部数据"->"新建 Web 查询",在&qu ...
- JAVA中将数据保存到EXCEL文件
java后端将数据库中数据或前端传来的数据保存到EXCEL文件中.代码中有详细注解. 依赖包 <dependency><groupId>org.apache.poi</g ...
- 将爬取的数据保存到Excel表格
第一步.导入模块 import xlwt # 导入写入excel需要的包 第二步.定义函数,将爬取好的数据保存到excel文件中,下面以保存python的关键词为例,介绍详细流程. def write ...
- Python--爬虫爬取的数据保存到excel
Python–爬虫爬取的数据保存到excel 文章目录 Python--爬虫爬取的数据保存到excel 一.excel表格存储 二.python3.9没有自带的xlwt模块和xlrd,需要自行下载 三 ...
- asp.net学习笔记·将数据库中的数据保存在EXCEL文件中
提取数据库中的数据,将其保存在EXCEL文件中,并提供下载. 在一般处理程序中将数据库数据保存在EXCEL文件中的代码 using System; using System.Collections.G ...
- aspx页面中,DataTable中的数据导出到Excel文件中
方法一:直接将DataTable中的数据通过GridView导出到Excel中,并显示下载界面 public void ExportToExcel(DataTable tab,string filen ...
最新文章
- junit 单元测试 - 参数化测试
- oracle中字符串的脚本表示什么意思,sql脚本中rem与prompt,define等的含义
- Qt Creator调试器故障排除
- hibernate正向生成数据库表以及配置——Teacher.java
- 弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星
- 真的很OK!雷军成科创板大赢家 相关投资企业3家已上市
- 随想录(学习wrk的代码)
- 酒的基金降幅较大,这是为什么?
- Cisco基本必须掌握命令
- 【Golang】关于从切片中删除某个元素时会覆盖底层数组的说明
- 基于vue+ts实现的svg可视化web组态编辑器
- VMware ESXI虚拟机修改MAC地址的方法
- hackinglab-脚本关10——基情燃烧的岁月
- 码农翻身全年文章精华
- python好学吗一般要学多久-python好学吗
- 怎样取消开机硬盘自检?
- C语言execvp实现简易Shell的两种方法
- echarts,x轴y轴,配置参数详情
- python葡萄酒数据_用python进行葡萄酒质量预测
- Abaqus模拟偏心受压钢管混凝土柱计算受压承载力