zoukankan      html  css  js  c++  java
  • .net创建excel文件关键代码及部分说明

    要在项目中添加com引用microsoft excel 11.0 object libary


    Excel.ApplicationClass ac = new Excel.ApplicationClass();//application相当于excel执行程序,就是excel.exe
                 ac.DefaultFilePath = "";
                 ac.SheetsInNewWorkbook = 2;//在创建excel的xls文件的时候默认有两个sheet
                 ac.DisplayAlerts = false;//在执行saveas方法时候不弹出提示对话框,比如有同名文件是否覆盖,设成false会直接覆盖
                
                
                 Excel.Workbook wb = ac.Workbooks.Add(Type.Missing);//Workbook相当于一个excel的xls文件
                 Excel.Worksheet ws = (Excel.Worksheet)ac.Worksheets[2];//因为前面设置了有两个sheet,所以这里是取得第2个sheet, Worksheet相当于excel文件中的一个sheet,另外注意excel的索引都是从1开始的


              
                 ws.Cells[1, 1] = "hello121";//往第2个sheet中的第1行第1列的格子中赋值"hello";
                 ac.Cells[1, 2] = "i love u";//这是往第一个sheet赋值,当像applicationclass中添加了workbook后它的cells应该只能访问到第1个sheet中的cell


                 //保存文件,Excel.XlSaveAsAccessMode是设置文件的访问方式的,其他的参数可以省略
                 wb.SaveAs(@"e:\a\test.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missin,Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
              
                
                 //重要,关闭excel,清除掉excel.exe进程  
                 ac.Workbooks.Close();//关闭所有文件
                 ac.Quit();//结束excel.exe,这行必须有,没有上一行也可以,就相当于关闭了excel应用程序,其中的文件也一同关闭了
                
                //以下几行至关重要,在ASP.NET中如无这几行,会导致excel进程无法清除的情况,这样最后会导致内存被每次导出启动的excel进程撑死,只有加上以下几行,才能将进程关闭。
                 int generation = GC.GetGeneration(ac);
                 System.Runtime.InteropServices.Marshal.ReleaseComObject(ac);
                 ac = null;
                 GC.Collect(generation);



    ExcelApplication.WorkBook.SaveAs(filename,FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodePage, TextVisualLayout ,Local)

    1、Filename: Variant 类型,可选。该字符串表示要保存的文件名。可包含完整路径。如果不指定路径,Microsoft Excel 将文件保存到当前文件夹中。

    2、FileFormat: Variant 类型,可选。保存文件时使用的文件格式。要得到有效选项的列表,请参阅 FileFormat 属性。对于已有文件,其默认格式是上次指定的文件格式;对于新文件,默认格式为当前使用的 Excel 版本格式 ,可选常数如下:



    xlAddIn 18
    xlCSV 6
    xlCSVMac 22
    xlCSVMSDOS 24
    xlCSVWindows 23
    xlCurrentPlatformText -4158
    xlDBF2 7
    xlDBF3 8
    xlDBF4 11
    xlDIF 9
    xlExcel2 16
    xlExcel2FarEast 27
    xlExcel3 29
    xlExcel4 33
    xlExcel4Workbook 35
    xlExcel5 39
    xlExcel7 39
    xlExcel9795 43
    xlHtml 44
    xlIntlAddIn 26
    xlIntlMacro 25
    xlSYLK 2
    xlTemplate 17
    xlTextMac 19
    xlTextMSDOS 21
    xlTextPrinter 36
    xlTextWindows 20
    xlUnicodeText 42
    xlWebArchive 45
    xlWJ2WD1 14
    xlWJ3 40
    xlWJ3FJ3 41
    xlWK1 5
    xlWK1ALL 31
    xlWK1FMT 30
    xlWK3 15
    xlWK3FM3 32
    xlWK4 38
    xlWKS 4
    xlWorkbookNormal -4143
    xlWorks2FarEast 28
    xlWQ1 34
    xlXMLData 47
    xlXMLSpreadsheet 46




    3、Password :Variant 类型,可选。它是一个区分大小写的字符串(最长不超过 15 个字符),用于指定文件的保护密码。

    4、WriteResPassword :Variant 类型,可选。 该字符串表示文件的写保护密码。如果文件保存时带有密码,但打开文件时不输入密码,则该文件以只读方式打开。

    5、ReadOnlyRecommended : Variant 类型,可选。如果该值为 True,则在打开文件时显示一条信息,提示该文件以只读方式打开。

    6、CreateBackup: Variant 类型,可选。如果该值为 True,则创建备份文件。

    7、AccessMode :XlSaveAsAccessMode 类型,可选,如果省略此参数,则不会更改访问方式。如果在没有改变文件名的情况下保存共享列表,则可以忽略参数。若要改变访问方式,请使用 ExclusiveAccess 方法。 以下是可选常量:xlExclusive 3 不含方式xlNoChange 1 不更改访问方式,缺省值xlShared 2 共享列表



    8、ConflictResolution : XlSaveConflictResolution 类型,如果忽略本参数,则显示****处理对话框。可选常量如下:


    xlLocalSessionChanges 2 自动接受本地用户的修改
    xlOtherSessionChanges 3 接受除本地用户之外的其他用户的更改
    xlUserResolution 1 显示****解决方案对话框


    9、AddToMru :Variant 类型,可选。如果该值为 True ,则将该工作簿添加到最近使用的文件列表中。默认值为 False。

    10、TextCodePage :Variant 类型,可选。不在美国英语版的 Microsoft Excel 中使用。

    11、TextVisualLayout :Variant 类型,可选。不在美国英语版的 Microsoft Excel 中使用。

    12、Local :Variant 类型,可选。如果该值为 True,则以 Microsoft Excel(包括控制面板设置)的语言保存文件。如果该值为 False(默认值),则以 Visual Basic for Applications (VBA) 的语言保存文件,其中 Visual Basic for Applications (VBA) 为典型安装的美国英语版本,除非 VBA 项目中的 Workbooks.Open 来自旧的国际化的 XL5/95 VBA 项目



    excel大致的模式应该是composition模式。
    applicationclass (excel应该程序)->(包含)Workbook(excel文档)->(包含)Worksheet(文档中的sheet)->(包含)Range(cell)


    关于office开发
    http://msdn2.microsoft.com/en-us/library/bb241279.aspx 说明OFFICE存储格式

    xlExcel8 56 才是2007中存成97-2003的格式,如果有workbook的saveas方法,要加上第2个文件格式参数才能存成97-2003格式,设置defaultsaveformat没有用对这个方法。

    如果不加第2个格式参数,它会存成2007的xlsx的格式。


    另外关闭excel进程还可以用强杀进程的办法

    GC.Collect();//强行销毁</p>
    <p>         #region 强行杀死最近打开的Excel进程
             System.Diagnostics.Process[] excelProc = System.Diagnostics.Process.GetProcessesByName("EXCEL");
             System.DateTime startTime = new DateTime();
             int m, killId = 0;
             for (m = 0; m < excelProc.Length; m++)
             {
                 if (startTime < excelProc[m].StartTime)
                 {
                     startTime = excelProc[m].StartTime;
                     killId = m;
                 }
             }
             if (excelProc[killId].HasExited == false)
             {
                 excelProc[killId].Kill();
             }

    但我觉得杀进程的办法在并发环境下不可用。
  • 相关阅读:
    Vue-cli3中导入Cesium并配置
    Intellij IDEA中安装插件的两种方式
    Docker01——Ubuntu上安装Docker
    Java反射02——动态代理
    Java反射01——基本概念
    Docker安全配置问题
    马踏棋盘里面的一些小问题
    马踏棋盘算法用Java语言实现
    Android 中AIDL的使用与理解
    数据库技术中的触发器(Trigger)——和ContentObserver功能类似
  • 原文地址:https://www.cnblogs.com/Randy0528/p/1659510.html
Copyright © 2011-2022 走看看