当前位置: 首页 > news >正文

C#中如何将DataTable中的数据写入Excel

    /// <summary>
   
/// 把DataTable导入到Excel中
   
/// </summary>
   
/// <param name="tableName"> 表的名字 </param>
   
/// <param name="result"> 要导入的DataTable </param>
    public   String OuterPutExcel(String tableName, DataTable result, int num)
    {
        oExcel
= new Excel.ApplicationClass();
        DataTable dt
= new DataTable(); // 按客户出货日月统计表
        StringBuilder build = new StringBuilder();
        build.Append(Server.MapPath(Request.ApplicationPath)).Append(
" \\App_Data\\ " ).Append(DateTime.Now.Year.ToString()).Append( " 年- " ).Append(DateTime.Now.Month).Append( " 月- " ).Append(DateTime.Now.Day.ToString()).Append( " " ).Append( " 成品报表.xls " );
        sFile
= build.ToString();
       
if (num == 1 ) // 第一次调用,判断是否有今天的成品报表,有此删除,添加新Excel文件.
        {
           
if (File.Exists(sFile))
                File.Delete(sFile);
//    '删除服务端临时文件
            oExcel.Workbooks.Add(Type.Missing); // 添加一个新的工作薄;
            Excel.Workbook activeBook = (Excel.Workbook)oExcel.ActiveWorkbook;
            activeBook.SaveAs(sFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing,
false , Type.Missing, Type.Missing, Type.Missing); // 新建一个Excel文件;
        }
        oExcel.Visible
= true ;
        oExcel.DisplayAlerts
= false ;
       
// '定义一个新的工作簿
        oBooks = oExcel.Workbooks; //
        oBooks.Open(sFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        oBook
= oBooks[ 1 ];
       
// oBook.Protect(Type.Missing, true, true); // 设置工作簿保护
        oSheets = oBook.Worksheets;
       
try
        {
           
// 把导入的数据表插入到适当的位置
            for ( int i = 0 ; i < oSheets.Count; i ++ )
            {
                oSheet
= (Excel.Worksheet)oSheets[i + 1 ];
               
// oSheet.Protect(Type.Missing, Type.Missing, Type.Missing, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, false); // 工作表保护;
                oCells = oSheet.Cells;
               
if (oSheet.Name.ToLower().Trim() == tableName.ToLower().Trim() || tableName == " 发货--按工厂分 " || tableName == " 发货--按客户分 " )
                {
                   
if (tableName == " 发货--按客户分 " )
                        oSheet.Name
= " 发货--按客户分 " ;
                   
else if (tableName == " 发货--按工厂分 " )
                    {
                        oSheet
= (Excel.Worksheet)oSheets[ 2 ]; // 第二个工作表
                        oSheet.Name = " 发货--按工厂分 " ;
                        oCells
= oSheet.Cells;
                    }
                    oCells.Clear();
                    DumpData(result, oCells);
// 在Excel中写数据.
                    oSheet.SaveAs(sFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                   
// oExcel.ActiveWorkbook.Close(true, sTemplate, null); // 关闭 Excel 文件且保存Excel文件
                    break ; // 跳出循环
                }
               
if (i == oSheets.Count - 1 ) // 在原来的表中找不到此工作表.
                {
                   
if (tableName == " 发货--按工厂分 " ) // 插入到第一个工作表中
                    {
                        oSheets.Add((Excel.Worksheet)oSheets[
1 ], Type.Missing, Type.Missing, Type.Missing); // 插入的工作表
                        oSheet = oBook.ActiveSheet as Excel.Worksheet;
                        oSheet.Name
= " 发货--按工厂分 " ;
                        oCells
= oSheet.Cells;
                        oCells.Clear();
                        DumpData(result, oCells);
// 在Excel中写数据.
                        oSheet.SaveAs(sFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                       
break ;
                    }
                   
else if (tableName == " 发货--按客户分 " ) // 插入到第二个工作表中
                    {
                        oSheets.Add((Excel.Worksheet)oSheets[
2 ], Type.Missing, Type.Missing, Type.Missing); // 插入的工作表
                        oSheet = oBook.ActiveSheet as Excel.Worksheet;
                        oSheet.Name
= " 发货--按客户分 " ;
                        oCells
= oSheet.Cells;
                        oCells.Clear();
                        DumpData(result, oCells);
// 在Excel中写数据.
                        oSheet.SaveAs(sFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                       
// oBook.SaveAs(sFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

                       
break ;
                    }
                   
else // 插入到第三个工作表之后.
                    {
                       
if (oSheet.Name.ToLower() == " sheet3 " )
                        {
                            oSheet.Name
= tableName;
                            oCells
= oSheet.Cells;
                            oCells.Clear();
                            DumpData(result, oCells);
// 在Excel中写数据.
                            oSheet.SaveAs(sFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                           
// oBook.SaveAs(sFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);       
                            break ;
                        }
                        oSheets.Add(Type.Missing, (Excel.Worksheet)oSheets[oSheets.Count], Type.Missing, Type.Missing);
// 插入的工作表
                        oSheet = oBook.ActiveSheet as Excel.Worksheet;
                        oSheet.Name
= tableName;
                        oCells
= oSheet.Cells;
                        oCells.Clear();
                        DumpData(result, oCells);
// 在Excel中写数据.
                        oSheet.SaveAs(sFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                       
// oBook.SaveAs(sFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);       
                        break ;
                    }
                }

            }
        }
       
catch (System.Exception ex)
        {
            System.Diagnostics.Process myproc
= new System.Diagnostics.Process(); //
            System.Diagnostics.Process[] proc = System.Diagnostics.Process.GetProcessesByName( " excel " );
           
foreach (System.Diagnostics.Process process in proc)
            {
               
if ( ! process.CloseMainWindow())
                {
                    process.Kill();
                }
            }

        }
       
finally
        {

            oBook.Close(Type.Missing, Type.Missing, Type.Missing);
           
// '退出Excel,并且释放调用的COM资源
            oExcel.Quit();
            Marshal.ReleaseComObject(oCells); Marshal.ReleaseComObject(oSheet);
            Marshal.ReleaseComObject(oSheets); Marshal.ReleaseComObject(oBook);
            Marshal.ReleaseComObject(oBooks); Marshal.ReleaseComObject(oExcel);
            oExcel
= null ; oBooks = null ; oBook = null ;
            oSheets
= null ; oSheet = null ; oCells = null ;
                     System.GC.Collect();
        }
       
/* 这里用到个goto语句,是因为: 线程是异步执行的,下面的代码要访问download.xls文件,但有
       少数情况下上面的线程'未能及时释放download.xls文件的指针,那么下面代码执行语句时会抛出异常, 当发生异常时需要等待资源释放后,'再重新访问该文件, 保证下载文件能够正确下载
*/
       
return sFile;

转载于:https://www.cnblogs.com/wsl2011/archive/2011/03/17/1986806.html

相关文章:

  • 打印机的一些高级设置
  • Qt4--FormLayout
  • 通用服务器桩-Receiver使用说明文档
  • linux ftp 实例
  • 啥活都得干好
  • python框架对比
  • 最快的搭建PXE
  • DBImport v3.0 中文版发布-支持各大数据库数据互导(IT人员必备工具)
  • C语言的第一堂课
  • linux定时任务的设置
  • WPF命中测试示例(二)——几何区域命中测试
  • heartbeat-ldirectord的配置
  • LLVM 与 Clang 介绍
  • 实例讲解如何查找某个对象的定义情况
  • Oracle数据库“Specified cast is农田valid”
  • CentOS 7 防火墙操作
  • css系列之关于字体的事
  • EventListener原理
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Java读取Properties文件的六种方法
  • log4j2输出到kafka
  • php的插入排序,通过双层for循环
  • V4L2视频输入框架概述
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 简析gRPC client 连接管理
  • 排序算法学习笔记
  • No resource identifier found for attribute,RxJava之zip操作符
  • 大数据全解:定义、价值及挑战
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #include<初见C语言之指针(5)>
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Matlab)使用竞争神经网络实现数据聚类
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (原創) 系統分析和系統設計有什麼差別? (OO)
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core中Emit的使用
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/C# 的字符串暂存池
  • .net中调用windows performance记录性能信息
  • .sys文件乱码_python vscode输出乱码
  • @ConfigurationProperties注解对数据的自动封装
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [ linux ] linux 命令英文全称及解释
  • [android] 手机卫士黑名单功能(ListView优化)