You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 05:57:10