2011-08-23 165 views
1

我从一个工作簿复制工作表并将它们粘贴到第二个工作簿中。 我用这个代码:在工作簿之间复制工作表 - Excel互操作

book = appExcel.Workbooks.Open(@"e:\tr\pliki\filename.xlsm", 
         Missing.Value, Missing.Value, Missing.Value, 
         Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
         Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
         Missing.Value, Missing.Value, Missing.Value); 

      Microsoft.Office.Interop.Excel.Global global = new Microsoft.Office.Interop.Excel.GlobalClass(); 
      sheet.Copy(Missing.Value, global.Sheets[5]); 
      book.Save(); 

一切工作正常,但问题是用公式。工作表被复制后,其中的公式引用第一个工作簿中的值。公式路径中包含来自其被复制路径,第一个工作簿:

='E:\tr\pliki\[filename.xlsm]worksheetA'!A1:E2 

,应该是这样的:

='worksheet'!A1:E2 

有谁能帮我吗?

+2

你应该接受从以前的问题的答案:如果你不关心被给了你答案,我们为什么要在乎你的新问题。 ..您可以通过点击最适合您的问题的答案左侧的勾号接受答案 – JMax

+1

对不起,我不知道我应该接受答案。 – Robert

回答

2

我不知道干净的方式来做你想做的事情,无论如何这是一种解决方法,可以解决你的问题。这只是在复制工作表之前将公式更改为文本并在此之后恢复所有内容的问题。即你可以用你知道不存在于你的数据中的一些字符串(例如,像X_X_X_X_X_X这样的奇怪字符)替换你的单元格中的所有=,然后恢复到初始状态。

的代码可能是这样的:

 Microsoft.Office.Interop.Excel.Application appExcel = new Microsoft.Office.Interop.Excel.ApplicationClass(); 
     Microsoft.Office.Interop.Excel.Workbook srcBook = appExcel.Workbooks.Open(@"c:\tmp\test.xls", 
        Missing.Value, Missing.Value, Missing.Value, 
        Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
        Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
        Missing.Value, Missing.Value, Missing.Value); 
     Microsoft.Office.Interop.Excel.Workbook destBook = appExcel.Workbooks.Add(Missing.Value); 
     Microsoft.Office.Interop.Excel.Worksheet srcSheet = (Microsoft.Office.Interop.Excel.Worksheet)srcBook.Worksheets[1]; 
     Microsoft.Office.Interop.Excel.Range usedRange = srcSheet.UsedRange; 
     usedRange.Replace("=", "X_X_X_X_X_X", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 
     srcSheet.Copy(destBook.Worksheets[1], Missing.Value); 
     Microsoft.Office.Interop.Excel.Worksheet destSheet = (Microsoft.Office.Interop.Excel.Worksheet)destBook.Worksheets[1]; 
     usedRange.Replace("X_X_X_X_X_X", "=", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 
     usedRange = destSheet.UsedRange; 
     usedRange.Replace("X_X_X_X_X_X", "=", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value); 
+0

好吧,它的工作原理,我将您的代码更改为: sheetDst =(Microsoft.Office.Interop.Excel.Worksheet)book.Worksheets [“AAA”]; range1 = sheetDst.get_Range(“A1”,“E2”); Object [] argsA = new Object [1]; argsA [0] = formula1; (“Formula”,BindingFlags.SetProperty,null,range1,argsA); range1 = sheetDst.get_Range(“A1”,“E2”); 它工作正常。 – Robert

相关问题