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

.net 通过C将数据从一个excel工作簿复制到另一个excel工作簿#,.net,.net,请帮我输入下面的代码。我想将所有数据从“D:\data Validation\u Source Code\TestExcel\DataValidationTest.xlsx”excel工作表复制到“D:\data Validation\u SourceCode\TestExcel\DataValidationTest-updated.xlsx”excel工作表,而不是复制到新的工作手册中。请帮帮我 try { string startPath = System.IO.Path.Get

请帮我输入下面的代码。我想将所有数据从“D:\data Validation\u Source Code\TestExcel\DataValidationTest.xlsx”excel工作表复制到“D:\data Validation\u 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); 
}  

一个问题是Path.Combine的第二个参数是完全限定的路径。在这种情况下,该方法实际上会忽略第一个参数并返回第二个参数。因此,调用
GetCurrentProcess().MainModule.FileName
无法完成任何任务

不过,您的主要问题是,您没有告诉Excel将新工作表放在哪里。如果文件名“D:\Data Validation\u 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\u SourceCode\TestExcel\DataValidationTest-updated.xlsx”已经存在,则需要在调用copy方法之前打开它,然后将其中一张工作表作为“before”或“after”参数传递给copy方法。如果工作簿不存在,可以按原样调用Copy,既不指定“之前”也不指定“之后”,然后用正确的名称保存新工作簿