【问题标题】:C# Export Table to ExcelC# 将表格导出到 Excel
【发布时间】:2014-10-05 20:45:59
【问题描述】:

如何使用以下方法将此数据表导出到 excel:“Microsoft.Office.Interop.Excel”更好的视图,不想使用数据网格。我认为有很多关于这个主题的帖子,但通常只是建议在“closexml”之类的广告上使用一些广告

        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();

感谢任何帮助。

【问题讨论】:

    标签: c# excel datatable


    【解决方案1】:

    您必须从here 导入 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;”中出现错误错误“无法嵌入错误 2 互操作类型‘Microsoft.Office.Interop.Excel.ApplicationClass’。请改用适用的接口。” @Dinesh Maind
    • Edit-1 "Excel._Application xlApp = new Excel.Application();"这解决了这个问题,但似乎什么也没发生。
    • 此代码不会将数据表列名称添加到导出的 Excel 中
    【解决方案2】:

    我知道已经有答案了,虽然这里有另一种方法

     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 是here

    【讨论】:

    • 只记得给你的数据集表和数据表添加一个表名。
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多