记录到文件。 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;
}
没有找到相关结果
已邀请:
2 个回复
快网
赞同来自:
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/, 是什么让数据导出非常容易,例如:
UPDATE
我只是在评论中读到了 OP 想要出口大量行,并认为这一点 Excel 有一些限制。 这不是这种情况,但脚本完全不同,从一开始。
Excel 对行数没有限制 2010 一年。 它可以处理几个数百万线的距离 PowerPivot/PowerQuery, 只要机器有足够的内存。 在 2010 年是文件大小的人为限制 2 GB. /以适应 SharePoint/, 但我认为他被删除了 2013 年。 它
巨大的
大小,因为 PowerPivot 使用与服务相同的列压缩 Analysis Services.
在这种情况下最好的选项是创建文件。 Excel 连接 PowerPivot, 向用户提供并要求他们在想要时更新数据。
不幸的是,这个功能 Excel, 不是文件格式。 这意味着您无法使用 SDK 要创建带压缩数据列的文件,但必须诉诸 interop/VSTO. 但是,在这种情况下,它是 Excel 执行努力以提取数据和压缩数据。
窦买办
赞同来自:
消除这两个因素 /数据组织和记录/ 将降低实际录制时间,以这种程度
无需同时编写它们。
我有一个旧的项目 VSTO, 在我必须从数据库中编写数据集的地方,我将数据蒸馏成二维数组,然后将整个数组录制到表上的区域,例如: