请在下面的代码中帮助我。我想将我的所有数据从“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);
}
答案 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方法无论是“之前”还是“之后”的论点。如果工作簿尚不存在,则可以按原样调用“复制”,既不在之前也不在之后指定,然后使用正确的名称保存新工作簿。