首页 > 编程语言 >C# 将DataTable 导出 Excel

C# 将DataTable 导出 Excel

时间:2024-04-23 14:58:10浏览次数:24  
标签:Office C# Excel Cells excel Microsoft Interop DataTable

首先 引用  Excel

完整代码

         // 速度最快 
        /// <summary>
        /// 将数据集中的数据导出到EXCEL文件
        /// </summary>
        /// <param name="dataTable">输入数据集</param>
        /// <param name="isShowExcle">是否显示该EXCEL文件</param>
        /// <returns></returns>
        public bool DataTableToExcel(DataTable dataTable, bool isShowExcle)
        {
            int rowNumber = dataTable.Rows.Count;//不包括字段名
            int columnNumber = dataTable.Columns.Count;
            int colIndex = 0;

            if (rowNumber == 0)
            {
                return false;
            }

            //建立Excel对象 
            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
            //excel.Application.Workbooks.Add(true);
            Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
            Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
            excel.Visible = isShowExcle;
            //Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)excel.Worksheets[1];
            Microsoft.Office.Interop.Excel.Range range;

            //生成字段名称 
            foreach (DataColumn col in dataTable.Columns)
            {
                colIndex++;
                excel.Cells[1, colIndex] = col.ColumnName;
            }

            object[,] objData = new object[rowNumber, columnNumber];

            for (int r = 0; r < rowNumber; r++)
            {
                for (int c = 0; c < columnNumber; c++)
                {
                    objData[r, c] = dataTable.Rows[r][c];
                }
                //Application.DoEvents();
            }

            //写入Excel 
            //.net 2.0写法
            //range = worksheet.get_Range(excel.Cells[2, 1], excel.Cells[rowNumber + 1, columnNumber]);
            //.net 4.0写法
            range = worksheet.Range[excel.Cells[2, 1], excel.Cells[rowNumber + 1, columnNumber]];
            //range.NumberFormat = "@";//设置单元格为文本格式
            range.Value2 = objData;
            //.net 2.0写法
            //worksheet.get_Range(excel.Cells[2, 1], excel.Cells[rowNumber + 1, 1]).NumberFormat = "yyyy-m-d h:mm";
            //.net 4.0写法
            worksheet.Range[excel.Cells[2, 1], excel.Cells[rowNumber + 1, 1]].NumberFormat = "yyyy-m-d h:mm";

            return true;
        }

 调用方法

private void btnToExcel_BtnClick(object sender, EventArgs e)
{
            //将dataGridView数据转为DataTable
            DataTable dt = this.dataGridView1.DataSource as DataTable;

            if (dt == null || dt.Rows.Count <= 0)
            {
                MessageBox.Show("没有要导出的数据,请查询后再试!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            clsExcelHelper objExcel=new clsExcelHelper();
 
            bool bolResult = objExcel.DataTableToExcel(dt, true);         

        if (bolResult == true)
            {
                MessageBox.Show("安装工单 导出成功!" + strFileName, "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("安装工单 导出失败!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

}  

 

标签:Office,C#,Excel,Cells,excel,Microsoft,Interop,DataTable
From: https://www.cnblogs.com/hailexuexi/p/18152876

相关文章

  • JTCR-java.util 集合框架-17
    JDK9开始,java.util包作为java.base模块的一部分。概述集合框架的设计目标高性能。不同类型的集合使用方式相似,有很好的互操作性。容易扩展或适配集合。Iterator接口提供了访问集合中元素通用、标准化的方式。任意集合类都可以使用Iterator提供的方法访问元素。JDK......
  • JS基础(二)运算符、流程控制语句、数组对象、JSON对象、Date对象、Math对象、Function对
    一运算符<script>//算数运算符//(1)自加运算varx=10;//x=x+1;//x+=2;varret=x++;//先赋值再计算:x+=1//varret=++x;//先计算再赋值:x+=1console.log(x)......
  • Oracle OCR,Vote disk故障恢复方案
     Oracle OCR,Votedisk故障恢复方案 1  概述OCR/Votedisk磁盘组故障场景恢复操作方案。测试版本:11.2.0.4.0适用于以下场景:操作维护OCR/Votedisk对应的磁盘组,提前备份了OCR文件信息,以便存在回退维护的空间。由于某些原因导致OCR/Votedisk的磁盘组丢失从而......
  • 自定义Mini-Tomcat(一)
    在Spring+ / SpringMVC中使用到了Tomcat。那么Tomcat提供什么功能呢?访问使用HTTP协议,所以它首先是一个HTTP服务器(关于HTTP协议资料较多自行查找);其次MVC提供servlet部署在tomcat中进行实际的业务操作,所以它还是一个Servlet容器。下面定义一个Mini-Tomcat提供以上两个......
  • 基于 ESPHome 的 3D 打印机舱内控制系统(1): 荆棘满途之 FireBeetle 2 ESP32-C6 初始
    前言开一个新坑,谋划了很久,最初是为了测试Moonraker的Sensor组件,逐步扩展到设计一个完整的控制系统。硬件选择ESP系列芯片,功能足够,还支持WiFi/BT。软件看了一圈选择ESPHome,轻代码,功能强大配置简单易上手。本文涉及的硬件:DFRoborFireBeetle2ESP32-C6迷你开发板本文......
  • kylin arm sp3 安装docker
    #cat/etc/kylin-release64位的操作系统#uname-paarch64Linux内核版本≥3.10#uname-r4.19.90-23.8.v2101.ky10.aarch64iptables版本≥1.4#iptables--versioniptablesv1.8.1(legacy)yumremovedocker\docker-client\dock......
  • 推荐一款好用的文档工具:docsify
    docsify是什么docsify可以快速帮你生成文档网站。不同于GitBook、Hexo的地方是它不会生成静态的.html文件,所有转换工作都是在运行时。如果你想要开始使用它,只需要创建一个index.html就可以开始编写文档并直接部署在GitHubPages。编写一些团队内部研发规范、api接口文档......
  • 「杂题乱刷」AT_abc279_e
    链接很一眼。容易发现除非操作时影响\(1\)这个数字,否则答案一定改变,直接特判影响到\(1\)这个数字的两种情况即可。代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?*/#include<bits/stdc++.h>using......
  • Spring AOP和AspectJ
    AOP:AspectOrientedProgramming,即面向切面编程是一种编程思想,是OOP(面相对象编程)的一个补充,实现对一类功能的集中处理,而不是在每个需要处理的地方进行直接的方法调用,常用于实现一些业务无关的功能(如事务控制、日志记录、安全控制、数据统计、异常处理等) SpringAOP:依赖于Spr......
  • JTCR-探索 java.lang-16
    原始类型包装器为了在必须使用类类型的地方使用原始类型,每个原始类型都有一个包装器,该包装器将原始类型封装成类类型。抽象类Number作为所有数值类型包装类的父类,定义了返回不同类型值的抽象方法。它的子类有Byte、Short、Integer、Long、Float和Double。这些抽象方法形式......