数据通过C#从一个excel工作簿复制到另一个工作簿

时间:2010-11-25 05:07:17

标签: .net

请在下面的代码中帮助我。我想将我的所有数据从“D:\ Data Validation_Source Code \ TestExcel \ DataValidationTest.xlsx”excel表复制到“D:\ Data Validation_SourceCode \ TestExcel \ DataValidationTest - updated.xlsx”excel表,但不是复制到新的工作簿。请帮我。

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); 
}  

1 个答案:

答案 0 :(得分:0)

一个问题是你对Path.Combine的第二个参数是一个完全限定的路径。在这种情况下,该方法有效地忽略第一个参数并返回第二个参数。因此,对GetCurrentProcess().MainModule.FileName的调用无法实现任何目标。

但是,您的主要问题是您没有告诉Excel将新工作表放在何处。如果在调用Copy方法之前文件名“D:\ Data Validation_SourceCode \ TestExcel \ DataValidationTest - updated.xlsx”没有出现在程序中,它怎么知道放在哪里?

以下是格式化的代码示例,添加了注释:

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:阅读Copy方法的帮助文件。它说“如果您未指定Before或After,Microsoft Excel将创建一个包含复制的工作表的新工作簿。”这解释了你所看到的行为。

脚注2:这项任务基本上没有任何结果,所以你不清楚你希望在这里实现什么。

建议:如果工作簿“D:\ Data Validation_SourceCode \ TestExcel \ DataValidationTest - updated.xlsx”已经存在,则需要在调用复制方法之前将其打开,然后将其中一个工作表传递给Copy方法无论是“之前”还是“之后”的论点。如果工作簿尚不存在,则可以按原样调用“复制”,既不在之前也不在之后指定,然后使用正确的名称保存新工作簿。