如何将公式写入Excel二进制文件?

我find了一个基本的excelfunction的开源项目 ,写入单元格,写入int到单元格,更改颜色,字体和东西。 有一件事是不存在的,它的附加公式,我无法实现,所以如果有人知道如何做到这一点,那就太好了。

BIFF格式:

internal sealed class BIFF { public const ushort DefaultColor = 0x7fff; public const ushort BOFRecord = 0x0209; public const ushort EOFRecord = 0x0A; public const ushort FontRecord = 0x0231; public const ushort FormatRecord = 0x001E; public const ushort LabelRecord = 0x0204; public const ushort WindowProtectRecord = 0x0019; public const ushort XFRecord = 0x0243; public const ushort HeaderRecord = 0x0014; public const ushort FooterRecord = 0x0015; public const ushort ExtendedRecord = 0x0243; public const ushort StyleRecord = 0x0293; public const ushort CodepageRecord = 0x0042; public const ushort NumberRecord = 0x0203; public const ushort ColumnInfoRecord = 0x007D; } 

编写int和string的示例方法

 private void WriteStringCell(BinaryWriter writer, CellInfo cell) { string value; if (cell.Value is string) value = (string)cell.Value; else value = cell.Value.ToString(); if (value.Length > 255) value = value.Substring(0, 255); ushort[] clData = { BIFF.LabelRecord, 0, 0, 0, 0, 0 }; byte[] plainText = Encoding.GetEncoding(CodePage).GetBytes(value); int iLen = plainText.Length; clData[1] = (ushort)(8 + iLen); clData[2] = (ushort)cell.Row; clData[3] = (ushort)cell.Column; clData[4] = (ushort)cell.FXIndex; clData[5] = (ushort)iLen; WriteUshortArray(writer, clData); writer.Write(plainText); } private void WriteNumberCell(BinaryWriter writer, CellInfo cell) { double dValue = Convert.ToDouble(cell.Value); ushort[] clData = { BIFF.NumberRecord, 14, (ushort)cell.Row, (ushort)cell.Column, (ushort)cell.FXIndex }; WriteUshortArray(writer, clData); writer.Write(dValue); } 

你可以从提供的链接下载源代码。 所以我想要的是有一个方法WriteFromulaCell ,将公式写入Excel。 没有成功。

提前致谢。

尝试使用NPOI ,它具有添加公式的能力,它是开放源码和免费的,或者还有另一个开源的xls项目: excellibrary 。 这两个项目声称完全BIFF实施。

BIFF中的公式被表示为令牌的二进制stream。 如果你要做的是创build一个WriteFormulaCell(),它可以使用一个像“= SUM(A3:Q47)”这样的string,并将其转换为有效的FORMULAlogging,那么这是几个月的工作,或者几年的工作,取决于。 而且,他们用于令牌的字节码也发生了几次变化 – 每个版本的BIFF都有一些变化或者其他方面的变化。

如果您要做的是在特定位置插入一个特定的简单公式,请启动Excel,将公式input到空电子表格的正确位置,另存为Excel 97,然后查看BIFF文件。 你会find正确parsing的记号stream的FORMULAlogging,你可以复制并插入到你自己的文件中。 我假设你知道整个相对参考/绝对参考的事情。 其他工作表的参考将按索引,而不是名称。 这个窍门定义的名字根本不起作用。 其他限制可能适用,您的里程可能会有所不同,不保证暗示等。

IIRC,一个Excel“二进制”文件实际上是一个带有XML代码的ZIP文件(至less对于新的Excel格式来说这是真的)。 我以前使用微软的图书馆来阅读这些文件。