在工作簿之间复制工作表- Excel互操作
本文关键字:Excel 互操作 工作 工作簿 之间 复制 | 更新日期: 2023-09-27 18:06:19
我从一个工作簿复制工作表并将它们粘贴到另一个工作簿中。我使用以下代码:
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
有人帮我吗?
我不知道有什么干净的方法来做你想做的事情,无论如何,这是一个可以解决你的问题的变通方法。这只是在复制工作表之前将公式更改为文本并在此之后恢复所有内容的问题。例如,您可以将单元格中的所有=替换为一些您知道数据中不存在的字符串(例如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);