2014-06-04 3 views
1

У меня есть книга Excel (xlsx) для создания отчетов. Есть требование, что я должен вставлять столбцы в некоторых случаях. Вот код, который я пытаюсь сделать. Он работает нормально, но не вставляет новый столбец в WorkSheet: Как это сделать?Как вставлять столбцы в рабочий лист Excel с OpenXML

using (SpreadsheetDocument document = SpreadsheetDocument.Open(outputPath, true)){ 
    Sheet sheet1 = document.WorkbookPart.Workbook.Descendants<Sheet>().Single(s => s.Name == "Balance"); 

    Worksheet workSheet1 = ((WorksheetPart)document.WorkbookPart.GetPartById(sheet2.Id)).Worksheet; 

    Columns cs = workSheet1.GetFirstChild<Columns>();       
    Column c = new Column() 
    { 
     Min = (UInt32Value)1U, 
     Max = (UInt32Value)1U, 
     Width = 44.33203125D, 
     CustomWidth = true 
    }; 
    cs.Append(c); 
} 

ответ

2

Что делает ваш код, отрегулируйте размеры первого столбца. Не вставляйте новую. Из моего понимания 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

+0

ClosedXML был solution.Thanks – Diane

 Смежные вопросы

  • Нет связанных вопросов^_^