Я нашел один открытый source project с базовой функциональностью excel, записываю ячейку, записываю int в ячейку, меняю цвет, шрифт и прочее. Одна вещь отсутствует, и ее добавление Формулы, и я не смог ее реализовать, поэтому, если кто-нибудь знает, как это сделать, было бы здорово.Как написать формулу в двоичный файл excel?
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;
}
пример метод для написания междунара и строк
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. Никаких успехов.
Заранее спасибо.
Почему бы не использовать модель автоматизации Excel? – Richard
из-за BIFF, и теперь я использую interop и его медленный, ломается, если более 3-х записей и т. Д., Я нашел эту библиотеку и генерирует 10k записей менее чем за 3 секунды. –
OK. Таким образом, это * производительность * (этот вид фона важен для Qs). Поняв, что на самом деле изменилось перфоманс, перейдя от ячейки за один раз до целых диапазонов с помощью автоматизации Excel, вы уверены, что не можете улучшить свою производительность без таких радикальных изменений? – Richard