0

我在 C# 中创建了一个非常简单的应用程序,它使用DotNetZipLib和类读取OpenDocument 电子表格文件。这是相对简单的,因为格式和样式与我的应用程序无关。XmlDocument

该格式包括与此问题有关的几个元素<table:table-column><table:table-row>和。即使考虑到列重复,列元素的数量也不一定与电子表格中的实际列数相对应。同样,每个行元素包含不同数量的单元格元素。<table:table-cell><table:covered-table-cell>

正如OpenDocument 规范中所述,我已经考虑到行、列和单元格可能重复的事实。这很好用,因为数据被读入我的数据格式的正确单元格。

根据我目前对规范的理解,计算电子表格中列数的唯一方法似乎是枚举每一行并计算单元格的数量。虽然这相对容易,但在填充我的数据结构之前知道列数会很方便。

有没有一种方法可以有效地确定电子表格中的列数,而不必单独考虑每一行?

4

2 回答 2

2

我不建议您直接阅读和操作 OpenDocument XML。建议您改用 OpenOffice UNO API 或 ODF 工具包。如果您可以在该机器上运行 OpenOffice,则使用 OpenOffice UNO API 会更容易。如果您无法在该机器上运行 OpenOffice,您可以使用 ODF 工具包https://incubator.apache.org/odftoolkit/

OpenOffice UNO API 和 C#: 使用 OpenOffice Uno CLI 和 C# 创建电子表格

使用 UNO API,我为此使用 XCellRangesQuery 中的 queryContentCells。 http://www.openoffice.org/api/docs/common/ref/com/sun/star/sheet/XCellRangesQuery.html#queryContentCells

于 2013-09-02T00:31:10.650 回答
0

我已经意识到要确定 OpenDocument 电子表格中的总列数,您必须首先阅读每一行,同时保持运行计数:

int maximumLength = 0;
while (IsReadingRows) {
    var row = ReadNextRow();
    rowList.Add(row);
    maximumLength = Math.Max(maximumLength, row.Length);
}

在读取行并且已知最大长度后,将空单元格添加到每个读取的行:

foreach (var row in rowList)
    while (row.Length < maximumLength)
        row.AddCell();
于 2013-09-06T16:03:36.597 回答