2010-11-25 214 views
0

請幫我在下面的代碼。我想將所有數據從「D:\ Data Validation_Source Code \ TestExcel \ DataValidationTest.xlsx」excel表單複製到「D:\ Data Validation_SourceCode \ TestExcel \ DataValidationTest - updated.xlsx」excel表單中,但不是將其複製到新的工作簿。請幫幫我。從一個Excel工作簿複製到另一個工作簿通過C#

try 
{ 
    string startPath = System.IO.Path.GetDirectoryName( 
     System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); 
    string filePath = System.IO.Path.Combine(startPath, 
     "D:\\Data Validation_Source Code\\TestExcel\\DataValidationTest.xlsx"); 

    xlApp = new Excel.Application(); 
    xlWorkBook = xlApp.Workbooks.Open(filePath); 
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
    xlWorkSheet.Copy(Type.Missing, Type.Missing); 
    xlWorkSheet = xlApp.Workbooks[2].Sheets[1]; 

} 
finally 
{ 
    if (xlWorkBook != null) 
    { 
     xlWorkBook.Close(); 
    } 
    if (xlApp != null) 
    { 
     xlWorkBook = xlApp.Workbooks.Open( 
      "D:\\Data Validation_SourceCode\\TestExcel\\DataValidationTest - updated.xlsx"); 
     xlApp.Quit(); 
    } 
    this.releaseObject(xlWorkSheet); 
    this.releaseObject(xlWorkBook); 
    this.releaseObject(xlApp); 
} 

回答

0

一個問題是,Path.Combine的第二個參數是一個完全限定的路徑。在這種情況下,該方法有效地忽略第一個參數並返回第二個參數。所以撥打GetCurrentProcess().MainModule.FileName並沒有完成任何事情。

但是,您的主要問題是您沒有告訴Excel放置新工作表的位置。如果文件名稱「D:\ Data Validation_SourceCode \ TestExcel \ DataValidationTest - updated.xlsx」在調用Copy方法之後纔出現在程序中,它怎麼知道該放哪裏?

下面的代碼樣本再次進行格式化,添加了評論:

try 
{ 
    string startPath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); 
    string filePath = System.IO.Path.Combine(startPath, "D:\Data Validation_Source Code\TestExcel\DataValidationTest.xlsx"); 
    xlApp = new Excel.Application(); 
    xlWorkBook = xlApp.Workbooks.Open(filePath); 
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
    xlWorkSheet.Copy(Type.Missing, Type.Missing); //Footnote 1 
    xlWorkSheet = xlApp.Workbooks[2].Sheets[1]; //Footnote 2 
} 
finally 
{ 
    if (xlWorkBook != null) 
    { 
     xlWorkBook.Close(); 
    } 
    if (xlApp != null) 
    { 
     xlWorkBook = xlApp.Workbooks.Open("D:\Data Validation_SourceCode\TestExcel\DataValidationTest - updated.xlsx"); 
     xlApp.Quit(); 
    } 
    this.releaseObject(xlWorkSheet); 
    this.releaseObject(xlWorkBook); 
    this.releaseObject(xlApp); 
} 

腳註1:閱讀複製方法的幫助文件。它說:「如果您沒有指定之前或之後,Microsoft Excel將創建一個新的工作簿,其中包含複製的工作表。」這解釋了你所看到的行爲。

腳註2:這項任務基本上什麼都沒有完成,所以目前還不清楚你希望在這裏實現什麼。

建議:如果工作簿「D:\ Data Validation_SourceCode \ TestExcel \ DataValidationTest-updated.xlsx」已經存在,則需要在調用複製方法之前將其打開,然後將其中一個工作表傳遞給Copy方法作爲「之前」或「之後」參數。如果工作簿尚不存在,則可以按照原樣調用「複製」,並在之前或之後指定,然後使用正確的名稱保存新工作簿。

相關問題