使用DocumentFormat.OpenXml.Spreadsheet添加工作表名称至居中页眉报错求助
解决Excel添加居中页眉(工作表名称)的代码错误
错误原因分析
你的代码存在两个核心问题,导致Excel解析文件出错:
- 重复添加HeaderFooter节点:不管工作表是否已有HeaderFooter元素,最后都执行
worksheetPart1.Worksheet.Append(headerFooter);,这会让Worksheet下出现多个HeaderFooter节点,而Excel规定一个工作表只能有一个HeaderFooter。 - 可能重复添加OddHeader节点:如果原有HeaderFooter已经包含OddHeader,直接
headerFooter.Append(oddHeader);会生成多个OddHeader节点,破坏XML结构。
修正后的代码
var headerFooter = worksheetPart1.Worksheet.Elements<HeaderFooter>().FirstOrDefault(); // 若不存在HeaderFooter,创建并添加到工作表 if (headerFooter == null) { headerFooter = new HeaderFooter(); worksheetPart1.Worksheet.Append(headerFooter); } // 统一设置页眉页脚规则 headerFooter.DifferentOddEven = false; headerFooter.DifferentFirst = false; // 处理居中页眉(工作表名称) var oddHeader = headerFooter.Elements<OddHeader>().FirstOrDefault(); if (oddHeader == null) { // 无现有OddHeader时创建并添加 oddHeader = new OddHeader("&C&A"); headerFooter.Append(oddHeader); } else { // 已有OddHeader时直接更新文本 oddHeader.Text = "&C&A"; }
关键说明
&C表示居中对齐,&A代表当前工作表名称,这个格式是正确的。- 操作时始终检查节点是否存在,避免重复添加破坏Excel的XML结构,这是Open XML操作Excel的核心注意点。
内容的提问来源于stack exchange,提问作者Hack.Sign
相关产品推荐
相关产品推荐

