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
相关产品推荐
相关产品推荐

