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

Excel Interop技术问题:如何将合并单元格值复制到另一工作表?

解决Excel Interop合并单元格复制问题

首先看你的代码里的路径转义问题:C#字符串中的反斜杠必须转义,要么用前缀@写成@"C:\Apps\test\appname\filename1.xlsm",要么将反斜杠替换为双反斜杠"C:\\Apps\\test\\appname\\filename1.xlsm",原代码的路径写法会直接导致编译错误,这可能是程序无法正常运行的核心原因之一。

然后是合并单元格的复制逻辑问题:合并区域C10:F10的实际内容仅存储在区域的**左上角单元格(C10)**中,直接使用Copy方法会连带复制合并格式,而目标是单个单元格B6,容易导致内容无法正确填充。更稳妥的处理方式是直接读取合并区域的值再赋值:

// 修正路径转义
Workbook book1 = excel.Workbooks.Open(@"C:\Apps\test\appname\filename1.xlsm");
Worksheet sheet = (Excel.Worksheet)book1.Worksheets.get_Item(2);
// 直接读取合并区域的有效内容
object mergeValue = sheet.Range["C10"].Value;

Workbook book2 = excel.Workbooks.Open(@"C:\Apps\test\appname\filename2.xlsm");
Worksheet worksheet = (Excel.Worksheet)book2.Worksheets.get_Item(4);
Range to = worksheet.Range["B6"];
// 直接赋值,仅传递内容不携带格式
to.Value = mergeValue;

// 必须释放COM资源,避免Excel进程后台残留
book2.Save();
book1.Close(false);
book2.Close(true);
Marshal.ReleaseComObject(to);
Marshal.ReleaseComObject(worksheet);
Marshal.ReleaseComObject(book2);
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(book1);
Marshal.ReleaseComObject(excel);

如果坚持要用Copy方法,可指定仅复制值:

from.Copy();
to.PasteSpecial(Excel.XlPasteType.xlPasteValues);
// 清除剪贴板状态,避免后续操作干扰
excel.CutCopyMode = Excel.XlCutCopyMode.xlCopyMode;

内容的提问来源于stack exchange,提问作者shravs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:35:00