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,否则所创建的文件就无法正常打开,也就是会弹出如下错误提示:
C#利用Microsoft.Office.Interop.Excel导出excel文件_第1张图片

  所以我们用 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);
            //创建sheet
            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];
            //获取你使用的excel 的版本号
            Version = xlApp.Version;
            //使用Excel 97-2003
            if (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()即可得到如下的结果:
C#利用Microsoft.Office.Interop.Excel导出excel文件_第2张图片


  除了使用Microsoft.Office.Interop.Excel程序集导出excel文件,我们还可以使用NPOI进行导出,会更加灵活方便,而且不要求安装有Excel应用程序。不过这里需要注意的是对于拓展名为xls的文件,需要使用HSSF,而对于拓展名为xlsx的文件则需要使用XSSF,否则就会出现之前的错误。

你可能感兴趣的:(excel,C#,导出文件,C#)