Что делает ваш код, отрегулируйте размеры первого столбца. Не вставляйте новую. Из моего понимания OpenXML вам нужно пройти коллекцию строк и настроить ссылку на ячейки для каждой отдельной ячейки.
Это будет включать итерацию через коллекцию строк, после чего каждая строка будет проходить через коллекцию ячеек. Получите ссылку на ячейку для каждой ячейки, которая будет в форме «B1», проанализируйте ее, увеличьте часть столбца, чтобы создать, например, «C1». Это все равно оставит вас вопросом, что делать с обновлением ссылок на формулы. Удачи с этим! :-)
Три альтернативы я могу думать:
1) Попробуйте что-то вроде ClosedXML - Я никогда не использовал это, так что не знаю, насколько хорошо она будет работать.
2) Напишите надстройку Excel, используя VSTO, а не OpenXML. Но это, по-видимому, в первую очередь победит объект OpenXML.
3) Думайте в боковом направлении. Создайте новый лист в книге, добавьте информацию для первого столбца, если требуется, и для каждой ячейки исходного листа «Баланс» создайте новую ячейку на новом листе, содержащую формулу в строке «Balance! A1».
Это был бы мой предпочтительный подход, поскольку он оставляет исходный текст неповрежденным в его исходном формате, и ваши отчеты могут читать с нового листа, в который вы также можете добавить любые другие рассчитанные столбцы, которые вы хотите.
Создание нового листа дает вам большую гибкость.
Вы можете добавить формулу ячейки, аналогичную:
string sourcecell = ...; // read this from the cell reference of the original cell
string newcell = ...; // parse the original cell ref and increment the column
row.Append(new Cell(
new CellFormula() {
FormulaType = CellFormulaValues.Normal,
Text = string.Format("Balance!({0})", sourcecell)
},
new CellValue("0.00")
) { CellReference = newcell, StyleIndex = 0 }
);
Я нашел эти 2 ссылки полезны, когда мы делали что-то подобное в последнее время:
Creating an OpenXML spreadsheet from scratch
Styling an OpenXML spreadsheet
ClosedXML был solution.Thanks – Diane