我需要按选定的行拆分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行需要一个小时。您是否知道如何提高此代码的速度?
答案 0 :(得分:0)
尝试使用OleDb驱动程序执行此任务。它应该比自动化更快。
string sourceConnectionString =
@"Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 XML;Data Source=C:\source\MyExcel.xlsx;";
using (var conn = new OleDbConnection(connectionString))
{
// ...
}
答案 1 :(得分:0)
我很确定能节省o(n)次并做workheet.Range [&#34; A1&#34;]。EntireRow.Copy();每次都没有必要。无法真正了解其中某些变量名称的含义。
然而,使用Stopwatch,你可以弄清楚自己花了这么长时间。