C# C-如何更快地将列表导出到电子表格?
我有一个程序,调用下面的方法,它只是将列表导出到Excel电子表格。程序的大部分运行时用于执行此方法一次。在我上一次运行中,这个方法花了5分50秒在大小约46000的列表上执行。您能就如何改进代码以使此方法运行得更快提出建议吗?我不认为这应该需要大约6分钟的时间来执行……但唯一让我印象深刻的是,可能有一种更有效的方法可以将列表导出到电子表格列,而无需使用伪整数变量I遍历行,并将一个字符串一次复制到列中C# C-如何更快地将列表导出到电子表格?,c#,excel,C#,Excel,我有一个程序,调用下面的方法,它只是将列表导出到Excel电子表格。程序的大部分运行时用于执行此方法一次。在我上一次运行中,这个方法花了5分50秒在大小约46000的列表上执行。您能就如何改进代码以使此方法运行得更快提出建议吗?我不认为这应该需要大约6分钟的时间来执行……但唯一让我印象深刻的是,可能有一种更有效的方法可以将列表导出到电子表格列,而无需使用伪整数变量I遍历行,并将一个字符串一次复制到列中 public static string ExportListToSpreads
public static string ExportListToSpreadsheet(string xlwbk, string xlwksht, List<string> tagnamelist)
{
var watch = new Stopwatch();
watch.Start();
object misValue = Refl.Missing.Value;
Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook;
xlWorkbook = xlApp.Workbooks.Add(misValue);
Excel.Worksheet xlsheet = xlWorkbook.Sheets.Add();
xlsheet.Name = xlwksht;
int i = 1;
foreach(string tagname in tagnamelist)
{
xlsheet.Cells[i,1].Value = tagname;
i += 1;
}
string filename = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\" + xlwbk;
xlWorkbook.SaveAs(filename, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue,
misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, misValue, misValue, misValue, misValue, misValue);
xlWorkbook.Close();
watch.Stop();
return watch.Elapsed.ToString();
}
感谢您的帮助。尝试一下ClosedXML库。我将数万行的数据表放入电子表格,大约需要10秒钟 对于列表,您只需执行以下操作:
using ClosedXML.Excel;
..
var wb = new XLWorkbook();
var ws = wb.Worksheets.Add("myData");
ws.Cell(1, 1).InsertData(tagnamelist);
wb.SaveAs(@"c:\..\tagnamelist.xlsx");
尝试一下ClosedXML库。我将数万行的数据表放入电子表格,大约需要10秒钟 对于列表,您只需执行以下操作:
using ClosedXML.Excel;
..
var wb = new XLWorkbook();
var ws = wb.Worksheets.Add("myData");
ws.Cell(1, 1).InsertData(tagnamelist);
wb.SaveAs(@"c:\..\tagnamelist.xlsx");
这不是针对C语言的答案,而是针对任何脚本/自动化:一次编写一个Excel单元格效率极低,而是定义一个范围并一次性设置数据。定义与所需数据布局匹配的二维变量数组,然后在Excel中引用相同大小的范围对象,并设置数据 我之所以使用VBA示例,是因为它易于测试,而且我不熟悉C如何创建数组(可能是2D对象数组)。在VBA中,范围上的.Value是多余的,但在C中可能需要
Sub WriteBigData()
Dim vData() As Variant
Dim lValues As Long
lValues = 10000
'Create a 2D array matching the size of your data
ReDim vData(1 To lValues, 1 To 1) As Variant
'Fill this temporary array with your data
'Just simple numbers in this example
For n = 1 To lValues
vData(n, 1) = n
Next n
Dim rng As Range
Set rng = Range("A1").Resize(lValues, 1)
'This sets all the values of the range in one hit
'with no costly iteration
rng.Value = vData
End Sub
这不是针对C语言的答案,而是针对任何脚本/自动化:一次编写一个Excel单元格效率极低,而是定义一个范围并一次性设置数据。定义与所需数据布局匹配的二维变量数组,然后在Excel中引用相同大小的范围对象,并设置数据 我之所以使用VBA示例,是因为它易于测试,而且我不熟悉C如何创建数组(可能是2D对象数组)。在VBA中,范围上的.Value是多余的,但在C中可能需要
Sub WriteBigData()
Dim vData() As Variant
Dim lValues As Long
lValues = 10000
'Create a 2D array matching the size of your data
ReDim vData(1 To lValues, 1 To 1) As Variant
'Fill this temporary array with your data
'Just simple numbers in this example
For n = 1 To lValues
vData(n, 1) = n
Next n
Dim rng As Range
Set rng = Range("A1").Resize(lValues, 1)
'This sets all the values of the range in one hit
'with no costly iteration
rng.Value = vData
End Sub
我所知道的最快的方法是使用OpenXMLSDK,但要使用XMLAPI而不是对象API来处理实际的单元格数据。互联网上有关于如何做到这一点的帖子对不起,自从我这么做以来,已经5年多了,3份工作了-我还没有掌握详细信息。我知道最快的方法是使用OpenXMLSDK,但要做实际的细胞数据,请直接进入XML API而不是对象API。互联网上有关于如何做到这一点的帖子对不起,自从我这么做以来,已经有5年多的时间和3份工作了-我还没有掌握详细信息谢谢你!!执行时间从6米到1秒。是的,我喜欢那个图书馆。这太容易了。太谢谢你了!!执行时间从6米到1秒。是的,我喜欢那个图书馆。这几乎太容易了。