OpenXML Excel列格式?

3
我正在使用OpenXML SDK 2.0通过模板将一些数据导出到Excel中。我可以很好地将所有内容都导出到Excel中。然而,该模板有几个工作表(实际上是全部)的列应用了背景颜色(样式),但单元格并没有,因为Excel还没有对该单元格进行真正的引用。
我在这些工作表上填充数据行,并且设置的值很好,但是当我设置它们的单元格格式时,它会返回默认的白色背景,并且不再与工作表的其余部分相匹配。
如何使单元格继承所在列的样式?我考虑尝试查找列并获取其样式,并将单元格样式设置为该样式,但我无法找到列的引用。我可以迭代一个工作表中的所有列,但它们没有给我它们的引用……
以下是实际将单元格插入行的代码片段:
    Cell newCell = new Cell() { CellReference = cellReference };
    if (refCell == null)
    { row.Append(newCell); }
    else
    { row.InsertBefore(newCell, refCell); }

refCell是之前的代码,基本上是为了确保单元格按正确顺序列出,否则Excel会出问题...
然后设置实际值的部分是:
     c.CellValue = new CellValue(indx.ToString());
     c.DataType = new EnumValue<CellValues>(CellValues.SharedString);

indx是共享字符串表中字符串的索引。

有人能帮忙吗?

谢谢


10年后,我仍然面临同样的问题,似乎没有人能给出答案。我基本上想使用OpenXml将一个值写入新的Excel单元格,但要保留已有的格式...我该如何做到这一点呢...? - undefined
我不记得我们在这里最终做了什么,因为这是10年前的事情了。但我知道,最终我们决定使用EPPlus来进行Excel交互,因为它似乎更加强大。这当然是有代价的,但我认为这是非常值得的(顺便说一句,我与EPPlus的创作者没有任何关联,只是它对我们来说效果很好)。 - undefined
2个回答

1
你可以通过单元格引用获取列名,然后获取在同一列中的所有单元格。如果该列的第一个单元格有样式,您可以使用它们的StyleIndex将其应用于当前单元格。
您可以查看此页面,了解如何根据单元格引用获取列名: http://msdn.microsoft.com/en-us/library/office/cc822064.aspx 也许有更直接的方法来实现您想要的,但我不知道。

1

请问你是如何设置这个值的?通常情况下不应该覆盖样式,但我自己没有测试过(我们不使用模板)。

无论如何:要查找列引用,您可以使用:

ExcelColumn columnReference = ExcelWorksheet.Column(columnIndex);

编辑: 顺便说一下,我正在使用EPPlus库(http://epplus.codeplex.com/)。 在我看来,这是一个非常易于使用的实现。我以为这就是你正在使用的那个,但我可能错了。


编辑以添加相关的代码部分... 感谢关于列的提示。 - undefined
好的,我无法弄清楚如何使列正常工作。我在您上面发布的代码中找不到任何相关信息。在OpenXML中,我没有看到任何关于名为ExcelColumn的对象。我看到了Column和Columns,如果我手动打开XML文件,我可以看到一个<cols>元素,其中包含几个<col>元素。然而,当我尝试使用Worksheet.Descendants<Column>()或Worksheet.Descendants<Columns>()或Worksheet.Elements<Column>()或Worksheet.Elements<Columns>()时,什么都没有返回... - undefined
你到底怎么才能获取列样式索引? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接