2011-08-23 214 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

相關問題