C#Excel无法复制工作表

我正在一个Web应用程序,用户可以上传一个Excel文件,我需要将数据从用户工作表复制到目标工作表,以便做一些计算。 为此,我有以下代码:

public class ExcelCtrl { private Excel.Application excelApp = null; private Excel.Workbook srcworkbook = null; private Excel.Workbook destworkbook = null; public void excel_init(String srcpath, String destpath, string copyrange) { //Open Excel this.excelApp = new Excel.Application(); //Open user's file this.srcworkbook = excelApp.Workbooks.Open(srcpath); Excel.Worksheet srcworksheet = (Excel.Worksheet)srcworkbook.Worksheets.get_Item(1); //Open calculation file this.destworkbook = excelApp.Workbooks.Open(destpath); Excel.Worksheet destworksheet = (Excel.Worksheet)destworkbook.Worksheets.get_Item(1); //Range of copy Excel.Range from = srcworksheet.get_Range(copyrange); Excel.Range to = destworksheet.get_Range(copyrange); //Copy from.Copy(to); //Close user's file srcworkbook.Close(); //Open Xla file excelApp.Workbooks.Open("someXlaFile.xla"); excelApp.Workbooks.Open("AnotherXlaFile.xla"); } 

基本上我有不同的方法来运行不同的计算,他们有以下结构。 一种计算方法与另一种计算方法有什么不同,就是所谓的macros,macros的数量和复制范围。

  public static string Calculation1(String InputFileName, String CurDir) { //The Excel calculation file and its path string filename = "CalculationFile.xls"; string path_server = ExcelCtrl.DossierCalcs + filename; ExcelCtrl excel = new ExcelCtrl(); excel.excel_init(CurDir + "\\" + InputFileName, ExcelCtrl.DossierCalcs + filename, "A1:Z105"); //excel.excel_run("Macro1"); //The rest is not important path_server = CurDir + "\\Resultats - " + InputFileName; excel.excel_run("AnotherMacro", path_server); excel.excel_close(); return path_server; } 

现在一切正常,除了一个计算(上面的一个)。 我无法从用户工作表中复制数据。
我已经testing过:

  • (正常使用)用一些新的数据上传一个Excel文件,当我在计算后下载文件时,它仍然是旧数据。
  • 将“A1:Z50”和“A1:A2”复制的范围缩小(我可能会太大)。 但是,我有另一个计算文件,我复制一个“A1:M730”的范围,它工作正常。
  • 用Ctrl + C手动复制; Ctrl + V(我想也许工作表被保护以免被修改或什么)

通过前两次testing,我仍然得到旧数据(不是用户数据),最后一个工作,我可以粘贴用户数据; 虽然不是很有用,如果有人需要做手动每次用户要求这个计算。
我希望这足以让你了解我的问题,希望你能指导我。

谢谢

编辑

你好,
只是为了澄清我在做什么。 我有一个networking应用程序,用户可以下载一个Excel的xlsx文件,他们必须填写他们的数据。 之后,他们必须将他们的file upload到服务器,并select他们想要运行的计算。 在服务器端,我将他们的数据(见上面的代码)复制到相应的Excel计算文件中。 所以对于每个计算我有一个用户input文件和一个计算文件运行。 总共有14个input文件和14个计算文件,其中13个工作正常。
我做了一些更多的testing,下面的testing不会复制我的数据:
(而我正在使用Excel 2010)

  • 将目标Excel文件的名称更改为更常用的名称,因为文件名中有一个“#”。
  • 将目标Excel文件的名称更改为复制所在的另一个目标文件。
  • 改变工作表颜色(我真的不相信会解决我的问题,但我没有什么可失去的)
  • 从我的目标文件逐个删除工作表

下面的testing工作(数据被复制到目标文件):

  • 复制到新的Excel文件
  • 复制到其他Excel计算文件(比方说文件B),我知道复制的作品

我对最后一个案子的想法是因为当我打开有问题的Excel文件时,出现了两个警告。 第一个说工作簿包含到其他数据源的链接,并问我是否要更新它(即使更新后,每次打开它时都会问我),第二个说工作簿包含不能链接的链接updated.I也有这2个警告当我打开文件B,但这个文件的副本工作。
所以我试图删除文件中的所有链接,它也不起作用。 此外,这些链接在我的13个其他文件中使用。
我有点失落,因为我已经删除了我的Excel文件中的所有工作表和链接,它仍然不会复制。 我在有问题的文件和新文件之间唯一的区别是前者包含macros。