2010-11-25 183 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方法作为“之前”或“之后”参数。如果工作簿尚不存在,则可以按照原样调用“复制”,并在之前或之后指定,然后使用正确的名称保存新工作簿。

相关问题