C#利用Microsoft.Office.Interop.Excel导出excel文件
导入Microsoft.Office.Interop.Excel.dll文件引用
为了能够导出excel文件,由于使用的是Microsoft.Office.Interop.Excel,所以我们首先要确保自己的计算机上需要安装有office应用程序,然后导入Microsoft.Office.Interop.Excel.dll程序集到我们的工程中。
1. 找到Microsoft.Office.Interop.Excel.dll文件所在位置
可以利用文件搜索软件在本地进行查找,看能不能找到,如果没有找到的话可以尝试上网搜索一下,或者可以找到。
本人的文件所在路径如下, 没找到的话也可以按照这个路径尝试找下。
C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\14.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll
2. 添加引用
右键解决方案资源管理器的引用 > 添加引用 > 浏览 > 按照所在路径进行找到dll文件添加即可。 在工程中使用方法如下:
//using Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
在程序中使用
1. 启动应用(Application)
Excel.Application xlApp = new Excel.Application();
2. 创建文件(Workbook)
Excel.Workbooks workbooks = xlApp.Workbooks;
Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
3. 创建工作表(Worksheet)
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
4. 添加内容
worksheet.Cells[1,1] = "第1行第1列的内容,没有第0行或者第0列";
5. 显示生成的excel文件
xlApp.Visible = true;
一个需要注意的重要内容
我们使用的保存文件语句,必须指定文件格式FormatNum,否则所创建的文件就无法正常打开,也就是会弹出如下错误提示:
所以我们用 workbook.SaveAs(filePath,FormatNum)
语句保存文件的,而不用workbook.SaveAs(filePath)
。
根据不同版本的Excel应用程序,所获得的FormatNum会有所不同。
//获取你使用的excel 的版本号
Version = xlApp.Version;
//使用Excel 97-2003
if (Convert.ToDouble(Version) < 12)
{FormatNum = -4143;
}
//使用excel 2007或者更新
else
{FormatNum = 56;
}
除了添加FormatNum的方法避免弹出错误,博主还发现,对于不同版本的Excel应用程序,使用不同的拓展名也可以解决该文件。博主使用的是office 2010,即使不指定FormatNum,只要使用拓展名xlsx
还是可以正常打开文件的,而使用拓展名xls
就会报错。而指定FormatNum,对不同的拓展名均可正常打开。由于不同用户使用的版本可能不同,所以我们还是需要对xlApp.Version
进行判断。
完整的代码
using System;
using System.IO;
using System.Collections;
using Excel = Microsoft.Office.Interop.Excel;namespace algorithm
{class ExcelExporter{private const int OLDOFFICEVESION = -4143;private const int NEWOFFICEVESION = 56;public void exportToExcel(ArrayList dataArray, string filePath){//保存excel文件的格式int FormatNum;//excel版本号string Version;//启动应用Excel.Application xlApp = new Excel.Application();System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");Excel.Workbooks workbooks = xlApp.Workbooks;//创建文件Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);//创建sheetExcel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//获取你使用的excel 的版本号Version = xlApp.Version;//使用Excel 97-2003if (Convert.ToDouble(Version) < 12){FormatNum = OLDOFFICEVESION;}//使用 excel 2007或更新else{FormatNum = NEWOFFICEVESION;}//添加输出excel表格的表头信息信息//注意这里的excel对应的单元格第一个位置为[1,1],而不是我们平时定义[0,0]ArrayList head = (ArrayList)dataArray[0];for (int i = 0; i < head.Count; i++){worksheet.Cells[1, i + 1] = head[i].ToString();}//添加输出excel表格的内容信息for (int rowIndex = 1; rowIndex < dataArray.Count; rowIndex++){ArrayList rowArr = (ArrayList)dataArray[rowIndex];for (int cellIndex = 0; cellIndex < rowArr.Count; cellIndex++){worksheet.Cells[rowIndex + 1, cellIndex + 1] = rowArr[cellIndex].ToString();}}//删除已存在的excel文件,否则会无法保存创建的excel文件if (File.Exists(filePath)){try{File.Delete(filePath);}catch(IOException e){Console.WriteLine(e.Message);}}//保存,这里必须指定FormatNum文件的格式,否则无法打开创建的excel文件workbook.SaveAs(filePath, FormatNum);//显示创建的excel文件xlApp.Visible = true;}//测试函数public void test(){ArrayList perant = new ArrayList();ArrayList head = new ArrayList();head.Add("头部");perant.Add(head);ArrayList data = new ArrayList();data.Add("data");perant.Add(data);exportToExcel(perant, @"D:\testExcell.xlsx");}}
}
写一个主程序,使用ExcelExporter
对象调用函数test()
即可得到如下的结果:
除了使用Microsoft.Office.Interop.Excel程序集导出excel文件,我们还可以使用NPOI进行导出,会更加灵活方便,而且不要求安装有Excel应用程序。不过这里需要注意的是对于拓展名为xls
的文件,需要使用HSSF
,而对于拓展名为xlsx
的文件则需要使用XSSF
,否则就会出现之前的错误。
C#利用Microsoft.Office.Interop.Excel导出excel文件相关推荐
- C# Microsoft.Office.Interop.Owc11 导出excel文件
C# Microsoft.Office.Interop.Owc11 导出excel文件 1.新建项SupremeWindowsForms窗体应用项目(项目平台设置称X86) 注意:因为大多数第三方写的 ...
- Microsoft.Office.Interop.Excel的用法以及利用Microsoft.Office.Interop.Excel将web页面转成PDF
1.常见用法 using Microsoft.Office.Interop.Excel; 1)新建一个ExcelApplicationClass ExcelApp = New ApplicationC ...
- C#利用Microsoft.Office.Interop.Excel导出数据到Excel
添加引用(VS2013位于C:\Program Files (x86)\Microsoft Visual Studio 12.0\Visual Studio Tools for Office\PIA\ ...
- Microsoft office interop word下打印机的运用
今天使用.net做一个票据打印模块时,学习几点,分享一下. 第一点,在.net下使用基于word模板生出新的word文档 using System; using System.Collections. ...
- 使用Microsoft.Office.Interop.Excel时,64位问题
前不久,碰到一个问题. 曾经用的好好的Microsoft.Office.Interop.Excel实现的导出Excel,迁移至64位server后,就出现: 检索 COM 类工厂中 CLSID 为 { ...
- ” Microsoft.Office.Interop.Excel”无法引用
首先是添加了Microsoft Excel11 Object Libray之后,发现引用里面的" Microsoft.Office.Interop.Excel"不能用.出现了一个可 ...
- C# Microsoft.Office.Interop.Excel Could not load file Error
Error desc: Could not load file or assembly 'office, Version=14.0.0.0, Culture=neutral, PublicKeyTok ...
- NPOI写Excel,Microsoft.Office.Interop.excel.dll 转换Excel为PDF
首先要引用NPOI动态库和Microsoft.Office.Interop.excel.dll (Microsoft.Office.Interop.excel.dll 下载链接 ,下载以后解压文件,把 ...
- C# 使用Microsoft.Office.Interop将Excel、Word转换成PDF遇到的问题总结
首先应用中引入Microsoft.Office.Interop.Excel.Microsoft.Office.Interop.Word两个dll,将嵌入式互操作类型设为False, WORD转换成PD ...
最新文章
- 谁知道静态成员的纠结心境
- Java为什么会有默认的背景色_java – 为什么我的背景颜色不会在JFrame中...
- python django-forbidden-csrf-cookie-not-set问题
- 嵌入式C语言基础(三)
- 前端学习(2226):react之状态
- Django - Cookie和Session
- Linux应用程序和驱动程序如何完成交互,应用程序和驱动的简易交互方式的实现...
- 汇编语言上机考试三星题——加密的key和明文字符串(二)
- 关于div+css布局值得注意的地方
- 软件项目管理案例教程(第3版)复习内容
- galaxy s8 android pc,【三星GALAXYS8评测】DeX套件替代PC办公环境_三星 GALAXY S8_手机评测-中关村在线...
- 神通数据库导出sql脚本
- 获取文件哈希值_Java 获得文件的指纹
- (JZ1619)2018.07.08【2018提高组】模拟C组 0	.音乐节拍
- 解决el-table 树形结构expand 操作后 stripe 显示失效问题
- php 返回英文乱码,使用php 5时MySQL返回乱码的解决办法_php
- SequenceToSequence
- mysql笔记(一):Navicat for MySQL远程连接mysql服务报错的解决方法(1130、2509)
- CCF C³活动第二期主题“智能家居”,与CTO聚首小米科技园!
- MyEclipse下载地址