第 3 章 C#的处理Excel和CSV

目录

3.1. C#中处理Excel
3.1.1. Excel自动适应列宽
3.1.2. 选中Excel的某列后再去自动适应列宽
3.1.3. Could not load file or assembly ‘Microsoft.Office.Interop.Excel
3.1.4. Microsoft.Vbe.Interop.dll和office.dll
3.2. C#中处理CSV

3.1. C#中处理Excel

3.1.1. Excel自动适应列宽

全选所有列再调用AutoFit:


//auto adjust column width (according to content)
Range allColumn = xlWorkSheet.Columns;
allColumn.AutoFit();

        

详见:【已解决】C#中操作刚导出的Excel,设置其为自动调整列宽

3.1.2. 选中Excel的某列后再去自动适应列宽

核心逻辑:

获得对应的列的Range,再去AutoFit


Range firstColumn = xlWorkSheet.get_Range("A1");
firstColumn.EntireColumn.AutoFit();

        

详见: 【已解决】C#中操作Excel文件实现单行的自动适应列宽+C#中如何选中Excel的某列

3.1.3. Could not load file or assembly ‘Microsoft.Office.Interop.Excel

使用C#操作Excel常会出现类似错误:

Could not load file or assembly ‘Microsoft.Office.Interop.Excel, Version=14.0.0.0

其可能原因,现总结如下:

C#的exe用到了excel的话,希望拿到别人的地方也正常运行不报错的话,

其中,别的地方:

  • 可能没装excel
  • 也可能装了excel,但是版本低

那么有几种选择:

  1. 最好自己在exe中集成了对应的excel的dll库。

    关于,集成dll到exe中,简述为:

    1. 把dll加到自己的资源resource中
    2. 把dll加到自己的项目中,且属性设置为 嵌入的资源(Embedded Resource)
    3. 自己的类的初始化函数中,加上对应的load dll的相关代码

    详见:【已解决】C#中集成DLL库到自己的exe程序中

  2. 即使不集成excel的dll,在引用excel的dll
    1. 也要尽量引用低版本

      比如别人已装的excel,即Office是Office12

      那么你也就不要去引用Office14==Office2010:

      C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll

      了,而去引用Office12==Office2007:

      C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office12\Microsoft.Office.Interop.Excel.dll
    2. 或者是和对方电脑中安装的excel的版本一致

      当然,最好确认一下,对方的电脑中装了哪个版本的Office(的excel)

      比如是Office 2010==Office14,那么你也就去引用对应的Office14:

      C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll

      就好了。

详见:【已解决】虽然已经安装了Office的Excel但是C#的exe还是运行出错:Could not load file or assembly ‘Microsoft.Office.Interop.Excel, Version=14.0.0.0

3.1.4. Microsoft.Vbe.Interop.dll和office.dll

Microsoft.Vbe.Interop.dll和office.dll,与Microsoft.Office.Interop.Excel.dll,一起,都是属于“Microsoft Office system 的可用程序集”

所以,最好也是要在集成,Microsoft.Office.Interop.Excel.dll,时,连带的一起把:Microsoft.Vbe.Interop.dll和office.dll都集成进来。

这样,才可以避免,别人在使用exe时,内部用到excel的dll时,完整的所需要的函数,都可以自带的找到了。

不会再对于Microsoft.Vbe.Interop.dll或office.dll报错说找不到。

详见:【已解决】Microsoft.Vbe.Interop.dll和office.dll是啥