【发布时间】:2014-10-23 11:31:44
【问题描述】:
我需要按选定的行拆分 excel 文件。我有相当多的行,所以手工拆分花费了太多时间。
worksheet.Range["A1"].EntireRow.Copy();
Microsoft.Office.Interop.Excel.Workbook nowy = excel.Workbooks.Add();
Excel.Worksheet sh = nowy.Sheets.Add();
sh.Name = "test";
Excel.Range r = sh.get_Range("A1", "A1").EntireRow;
r.Insert(Excel.XlInsertShiftDirection.xlShiftDown);
int y;
int limit=range.Rows.Count;
for ( y= 2; y <= limit; y++)
{
ile++;
worksheet.Range["A" + y].EntireRow.Copy();
Trace.Write(ile + ",");
r = sh.get_Range("A2", "A2").EntireRow;
r.Insert(Excel.XlInsertShiftDirection.xlShiftDown);
if (worksheet.Cells[y, x].value != worksheet.Cells[y+1, x].value)
{
osredu=worksheet.Cells[y, x].value;
string plik_ = "c:\\plikixml_dzielone\\" + osredu;
nowy.SaveAs(plik_,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
false,
false,
Excel.XlSaveAsAccessMode.xlShared,
false,
false,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value);
nowy.Close();
worksheet.Range["A1"].EntireRow.Copy();
nowy = excel.Workbooks.Add();
sh = nowy.Sheets.Add();
sh.Name = "test";
r = sh.get_Range("A1", "A1").EntireRow;
r.Insert(Excel.XlInsertShiftDirection.xlShiftDown);
Trace.WriteLine(Environment.NewLine);
Trace.WriteLine(ile_szkol+ "---"+ osredu + " : " + ile);
Trace.WriteLine(Environment.NewLine);
ile = 0;
ile_szkol++;
}
}
我匹配此代码。它工作正常,但速度极慢,并且无法使用剪贴板。拆分超过 9500 行需要一个小时。你知道如何提高这段代码的速度吗?
【问题讨论】:
-
先复制整个文件N次,然后删除每个文件中不需要的行怎么样?
-
还是太费时间了,我要241个文件
-
为什么需要这样做?为什么您将所有数据存储在 1 个电子表格中,而您似乎真的希望按照某些标准对其进行拆分?
-
这不是我的文件。我只是让它分裂。
-
您正在使用哪个版本的 excel?使用 OpenXML 甚至 ClosedXML API。它会比互操作服务快得多...closedxml.codeplex.com/…