【问题标题】:Efficient way to export data from datatable object to Excel将数据从数据表对象导出到 Excel 的有效方法
【发布时间】:2015-10-03 12:38:12
【问题描述】:

下面的代码完成了这项工作,但完成执行需要将近 60 秒。大约有 2000 行和 55 列。我想嵌套循环不是最有效和最专业的方式,我在谷歌搜索但没有找到更好的方式......(我想也许有一种方法可以使用 SQL?)。我将感谢有关使这项任务更有效率的建议。 (它是用 vb.net 编写的,但 c# 也适用于示例和建议)

   Public Sub LoadDataTableToExcell(ByVal d As DataTable, ByVal path As String, ByVal fileName As String, ByVal newFile As Boolean, ByVal sheetName As String)

   If CheckIfDirExist(path) = False Then
            MsgBox("the Path" & " " & path & " " & "Does not exist")
            Exit Sub
        End If
        CreateAnExcelFile(path, sheetName)

        Dim xlapp As New Excel.Application
        Dim ws As Excel.Worksheet
        Dim xlworkbook As Excel.Workbook

        xlworkbook = xlapp.Workbooks.Open(path)
        ws = xlworkbook.Sheets(sheetName)
        Dim Erows As Integer = Nothing
        Dim Ecolumns As Integer = Nothing

        For Ecolumns = 0 To d.Columns.Count - 1
            ws.Cells(1, Ecolumns + 1) = d.Columns(Ecolumns).ColumnName
            For Erows = 0 To d.Rows.Count - 1
                ws.Cells(Erows + 3, Ecolumns + 1) = d.Rows(Erows).Item(Ecolumns)
            Next
        Next


        Dim CarbonNewRng As Excel.Range

        CarbonNewRng = ws.Range(ws.Cells(1, 1), ws.Cells(d.Rows.Count + 2, d.Columns.Count))
        CarbonNewRng.Borders.Weight = 4
        CarbonNewRng.Borders.Color = Color.FromArgb(0, 64, 64)

        ws.Columns("A:AZ").autofit()

        xlworkbook.Save()
        xlworkbook.Close()
        xlapp.Quit()



        releaseObject(xlapp)
        releaseObject(ws)
        releaseObject(xlworkbook)


        xlworkbook = Nothing
        xlapp = Nothing
        ws = Nothing
    Else

    End If
 end sub

【问题讨论】:

  • 任何时候您需要打开 Excel 应用程序对象,都需要一些时间。如果您只关心数据,您可以使用 OleDBCommand,或者简单地写出一个 csv 文件。如果您需要进行格式化,请查看 ClosedXML closedxml.codeplex.com
  • 是否可以添加一个示例如何使用 OleDBCommand 将 dataTable 导出到 excel 中?
  • stackoverflow.com/questions/151005/…(大约是答案的1/2)

标签: c# vb.net excel datatable


【解决方案1】:

这很奇怪,但最快的方法是最笨的:

  1. 全选数据表
  2. 复制
  3. 创建 xls 文件
  4. 粘贴

说真的,我尝试了很多,但使用标准 Win 控件设置它是最快的。

upd这个语法你可以很容易地在网上找到,不让我复制粘贴在这里

您可能还想查看此http://closedxml.codeplex.com/

那么语法就很简单了:

XLWorkbook wb = new XLWorkbook();
DataTable dt = GetDataTableOrWhatever();
wb.Worksheets.Add(dt,"WorksheetName");

【讨论】:

  • 从来没有...语法是什么 dataTable.Copy() worksheet.Paste("a1") ?
  • 我下载了 DLL 并在我的项目中进行了引用,但我不断收到此错误:无法加载文件或程序集 'DocumentFormat.OpenXml,版本 = 2.5.5631.0,文化 = 中性,PublicKeyToken = 31bf3856ad364e35 ' 或其依赖项之一。系统找不到指定的文件。
  • 选择“引用”右键单击-管理 NuGet 包-搜索“closedxml”-选择它并单击安装
  • 我在 Visual Studio 2015 中看不到这个选项,我的项目 IDE 是 Visual Studio 2010,找不到这个选项...
  • 不知道如何解释如何在项目中引用dll-继续尝试,我还能说什么,解决方案一定会为你工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
  • 2011-12-22
  • 2017-03-27
  • 1970-01-01
相关资源
最近更新 更多