在工作簿之间复制工作表 – 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(); 

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

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

应该是这样的:

 ='worksheet'!A1:E2 

有人帮我吗?

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

代码可能是这样的:

  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);