如何用C# Interop仅复制Excel工作表数值到另一工作簿?
解决Excel Interop复制数据仅保留计算值的问题
你的问题出在直接使用Copy方法会连同公式一起复制到目标工作簿,而源公式引用的其他工作表在目标工作簿中不存在,导致公式报错。要仅复制计算后的值,可以通过以下两种方式修改代码:
方法1:使用PasteSpecial粘贴值(保留格式)
这种方式会保留原单元格的数字格式,同时只粘贴计算结果,不携带公式:
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); app.Visible = true; Workbook FichierCE = app.Workbooks.Open(currentFileTravail, UpdateLinks: true); Worksheet fichierTab = FichierCE.Worksheets[tabCEEntiteName]; Workbook wBFichierTab = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); Worksheet fichierTabTab = wBFichierTab.Worksheets[1]; Range data = fichierTab.Range["A4:B100"]; data.Copy(); // 粘贴值和数字格式,避免公式引用错误 fichierTabTab.Range["A1"].PasteSpecial(XlPasteType.xlPasteValuesAndNumberFormats); // 清除剪贴板状态,防止干扰后续操作 app.CutCopyMode = false;
方法2:直接赋值单元格值(更高效)
这种方式跳过剪贴板,直接将源单元格的计算值赋值给目标单元格,执行效率更高,适合只需要数据、不需要保留格式的场景:
Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application(); app.Visible = true; Workbook FichierCE = app.Workbooks.Open(currentFileTravail, UpdateLinks: true); Worksheet fichierTab = FichierCE.Worksheets[tabCEEntiteName]; Workbook wBFichierTab = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); Worksheet fichierTabTab = wBFichierTab.Worksheets[1]; Range data = fichierTab.Range["A4:B100"]; // 调整目标范围大小与源数据一致 Range targetRange = fichierTabTab.Range["A1"].Resize(data.Rows.Count, data.Columns.Count); // 直接赋值计算后的值 targetRange.Value = data.Value;
关键说明
xlPasteValuesAndNumberFormats:粘贴值和数字格式,若只需纯文本值,可改用XlPasteType.xlPasteValues- 直接赋值
Value的方式无需依赖剪贴板,避免了剪贴板占用带来的潜在问题
内容的提问来源于stack exchange,提问作者d_anass
相关产品推荐
相关产品推荐

