将表格导出到Excel的C#

3

如何使用“Microsoft.Office.Interop.Excel”将此数据表导出到Excel?我有这段代码,它从主表中获取所有数据并希望将其导出到Excel以获得更好的视图,不想使用datagrid。我认为关于此主题有很多帖子,但通常只建议使用诸如“closedxml”之类的附加组件。

        OleDbConnection mycon;           
        DataTable Table = new DataTable("AllData");

        mycon = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\jm11321\Documents\DB.mdb;Persist Security Info=False");

        string command = "Select *From Master";
        OleDbCommand oleDbCmd = new OleDbCommand(command,mycon);

        OleDbDataAdapter adapt = new OleDbDataAdapter(oleDbCmd);
        mycon.Open();
        adapt.Fill(Table);
        mycon.Close();

非常感谢您的帮助。

2个回答

4

您需要从这里导入Microsoft.Office.Interop.Excel.dll库。在您的项目中添加新的类文件,例如ExcelUtility。只需在其中编写以下代码即可。

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Excel = Microsoft.Office.Interop.Excel;

namespace ExcelDemo
{
    public class ExcelUtility
    {
        public static void CreateExcel(DataSet ds, string excelPath)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;

            try
            {
                //Previous code was referring to the wrong class, throwing an exception
                xlApp = new Excel.Application();
                xlWorkBook = xlApp.Workbooks.Add(misValue);
                xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

                for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
                {
                    for (int j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
                    {
                        xlWorkSheet.Cells[i + 1, j + 1] = ds.Tables[0].Rows[i].ItemArray[j].ToString();
                    }
                }

                xlWorkBook.SaveAs(excelPath, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
                xlWorkBook.Close(true, misValue, misValue);
                xlApp.Quit();

                releaseObject(xlApp);
                releaseObject(xlWorkBook);
                releaseObject(xlWorkSheet);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private static void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch
            {
                obj = null;
            }
            finally
            {
                GC.Collect();
            }
        } 
    }
}

现在在主代码中,只需要传递以下数据集对象和Excel文件路径即可。
ExcelUtility.CreateExcel(ds, "D:\\Demo.xls");

我已经测试并在我的项目中使用了这个。


我在 "Excel.Application xlApp;" 遇到了一个错误 "Error 2 Interop type 'Microsoft.Office.Interop.Excel.ApplicationClass' cannot be embedded. Use the applicable interface instead." @Dinesh Maind - MoralesJosue
"Excel._Application xlApp = new Excel.Application();" 这个修复了那个问题,但是似乎没有任何反应。 - MoralesJosue
这段代码没有将Datatable列名添加到导出的Excel中。 - Rahul Bhat

3

我知道已经有一个答案了,但这里提供另一种方法。

 var workbook = new XLWorkbook();
        var worksheet = workbook.Worksheets.Add("Sample Sheet");
        worksheet.Cell("A1").Value = "Hello World!";
        workbook.SaveAs("HelloWorld.xlsx");

这种方法的另一个惊人之处在于,您可以像这样将数据集表格或表格放入工作簿中。
 var wb = new XLWorkbook();

        var dataTable = GetTable("Information");

        // Add a DataTable as a worksheet
        wb.Worksheets.Add(dataTable);

        wb.SaveAs("AddingDataTableAsWorksheet.xlsx");

这个 DLL 文件可以在这里下载。


只需记得将表名添加到数据集表和数据表中。 - Jonny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接