记录到文件。 excel 有几个溪流

我正在努力写作 datatable - excel, 哪里有很大的记录。 我正在努力在战略的帮助下实现 divide and conquer 其中每个流被分配给相应纸张的条目 excelworkbook.but 我收到读取文件,单击 Ok, 覆盖文件。


class Program
{
int processorCount = 2;
static volatile bool processing = true;
DataTable employeeTable = new DataTable/"Employee"/;
ManualResetEvent mre = new ManualResetEvent/false/;

AutoResetEvent ar = new AutoResetEvent/true/;
int record_count;
static void Main/string[] args/
{
Program p = new Program//;

//Create an Emplyee DataTable

p.employeeTable.Columns.Add/"Employee ID"/;
p.employeeTable.Columns.Add/"Employee Name"/;
for /int i = 0; i <= 2; i++/
{
p.employeeTable.Rows.Add/i.ToString//, "ABC"/;
}
p.record_count = p.employeeTable.Rows.Count / p.processorCount;


Excel.Application excelApp = new Excel.Application//;

//Create an Excel workbook instance and open it from the predefined location
Excel.Workbook excelWorkBook1 = excelApp.Workbooks.Open/@"F:\Org.xlsx"/;

Thread[] threads = new Thread[3];
for /int i = 0; i < 3; i++/
{

// p.ExportDataSetToExcel/i/;
ParameterizedThreadStart ps = new ParameterizedThreadStart/p.ExportDataSetToExcel/;
threads[i] = new Thread/ps/;
threads[i].Start/new Custom// { sheetNo = i, excelWorkBook = excelWorkBook1 }/;
}

for /int j = 0; j < 3; j++/
{
threads[j].Join//;
}

Console.WriteLine/"Succeess"/;

Console.ReadKey//;



}

private void ExportDataSetToExcel/object sheet1/
{

lock /this/
{
bool found = false;
Excel.Worksheet excelWorkSheet;

int sheetNo = //Custom/sheet1/.sheetNo;
Excel.Workbook excelWorkBook = //Custom/sheet1/.excelWorkBook;
excelWorkSheet = /excelWorkBook/.Sheets["Sheet" + //int/sheetNo + 1/.ToString//];

for /int i = 1; i < employeeTable.Columns.Count + 1; i++/
{
excelWorkSheet.Cells[1, i] = employeeTable.Columns[i - 1].ColumnName;
}

int baseIndex = /int/sheetNo * record_count;
for /int j = baseIndex; j < baseIndex + record_count; j++/
{
for /int k = 0; k < employeeTable.Columns.Count; k++/
{
excelWorkSheet.Cells[j + 2, k + 1] = employeeTable.Rows[j].ItemArray[k].ToString//;
}
}

Console.WriteLine/sheetNo.ToString///;
Console.WriteLine/"\n"/;

/excelWorkBook/.Save//;
/excelWorkBook/.Close//;
}
}



}**strong text**
public class Custom
{
public int sheetNo;
public Excel.Workbook excelWorkBook;
}
已邀请:

快网

赞同来自:

而不是使用 interop 穿过 OLE 或者 VSTO, 使用类型库
http://epplus.codeplex.com/
,
https://npoi.codeplex.com/
或者使用
https://msdn.microsoft.com/EN- ... .aspx
直接创建文件 Excel.

Interop 让你在一条流中工作,你总是支付成本 CPU interop, 如此惊讶 CPU 和运行的记忆 Excel 最后 CPU 和 IO 保存文件。

另一方面,开放 XML SDK 和其他图书馆甚至不需要 Excel. 所有操作都在内存中执行,并且您只需支付成本。 CPU 和 IO 保存文件。 结果,他们变得更快地获得订单

因此,您可以在使用的Web和服务器应用程序中使用它们 Interop 和 VSTO 不可能的

EPPlus 有一些很好的功能,如创建表 Excel 的 DataTable /LoadFromDataTable/ 或请求 LINQ /LoadFromCollection/, 是什么让数据导出非常容易,例如:


using /var excelFile = new ExcelPackage/targetFile//
{
var worksheet = excelFile.Workbook.Worksheets.Add/"Sheet1"/;
var tableRange=worksheet.Cells["A1"].LoadFromCollection/employees, true/;
excelFile.Save//;
}


UPDATE

我只是在评论中读到了 OP 想要出口大量行,并认为这一点 Excel 有一些限制。 这不是这种情况,但脚本完全不同,从一开始。

Excel 对行数没有限制 2010 一年。 它可以处理几个数百万线的距离 PowerPivot/PowerQuery, 只要机器有足够的内存。 在 2010 年是文件大小的人为限制 2 GB. /以适应 SharePoint/, 但我认为他被删除了 2013 年。 它

巨大的

大小,因为 PowerPivot 使用与服务相同的列压缩 Analysis Services.

在这种情况下最好的选项是创建文件。 Excel 连接 PowerPivot, 向用户提供并要求他们在想要时更新数据。

不幸的是,这个功能 Excel, 不是文件格式。 这意味着您无法使用 SDK 要创建带压缩数据列的文件,但必须诉诸 interop/VSTO. 但是,在这种情况下,它是 Excel 执行努力以提取数据和压缩数据。

窦买办

赞同来自:

很遗憾, Excel 不是设计用于多线程。 但我推荐的内容 - 这就是您所拥有的条目以更高效。 每个单元格记录单元格是最大的放缓。

消除这两个因素 /数据组织和记录/ 将降低实际录制时间,以这种程度

无需同时编写它们。

我有一个旧的项目 VSTO, 在我必须从数据库中编写数据集的地方,我将数据蒸馏成二维数组,然后将整个数组录制到表上的区域,例如:


Microsoft.Office.Tools.Excel.Worksheet TheSheet;


private void PublishToSheet/ int totalRows, int maxColumns, ref string[,] OutputArray /
{
Excel.Range Range = TheSheet.Range["A1", TheSheet.Cells[totalRows, maxColumns]];
Range.NumberFormat = "@";
Range.Value2 = OutputArray;

LastRow = totalRows;
LastColumn = maxColumns;

}

要回复问题请先登录注册