2012-04-16 4 views
3

Я пытаюсь выбрать конкретный столбец, чтобы автоматически установить его ширину, но у меня мало успеха. Должен ли я не использовать MSDN-версию GetRow для выбора столбца из коллекции колонок?OpenXML Выбор определенного столбца

return worksheet.GetFirstChild<SheetData>().Elements<Row>().Where(r => r.RowIndex == rowIndex).First(); 

return worksheet.GetFirstChild<SheetData>().Elements<Column>().Where(r => r.Min== columnNumber && r.Max == columnNumber).First(); 

Я правильно подхожу? FWIW Я знаю, как создать столбец с нуля и установить ширину, но это невозможно, поскольку я не знаю, какие данные будут внутри столбцов, когда я их создам в моем конструкторе.

ответ

1

Вы можете добавить объект столбца в рабочий лист. Затем я создал метод, который устанавливает ширину.

Worksheet ws = new Worksheet(); 
Columns columns = new Columns(); 

columns.Append(CreateColumnData(1, 1, 14.87)); 

ws.append(columns); 


private static Column CreateColumnData(UInt32 StartColumnIndex, UInt32 EndColumnIndex, double ColumnWidth) 
    { 
     Column column; 
     column = new Column(); 
     column.Min = StartColumnIndex; 
     column.Max = EndColumnIndex; 
     column.Width = ColumnWidth; 
     column.CustomWidth = true; 
     return column; 
    } 
+0

Таким образом, независимо от того, что входит в колонку 1, ширина будет установлена ​​на 14.87 – broguyman

+0

. Вы совершенно правы ... и я уже мог это сделать раньше ... Что мне нужно сделать, так это динамически выбрать ширину столбец, основанный на том, что внутри него. :(Это не помощь. :(@broguyman – Kulingar

0

У меня была та же проблема, что и для установки ширины для разных столбцов, но не удалось найти решение в Интернете. Ответы, представленные до сих пор, показывают, как создать столбец с указанной шириной, но не как обновить динамическую ширину указанного столбца. Может быть, я не очень хорошо знаком с библиотекой openxml .net, но швы DocumentFormat.OpenXml не задокументированы и не интуитивно понятны, как Office.Interop. Поскольку мое приложение выполнялось как служба azure, у меня не было возможности использовать Office.Interop. Решение для меня заключалось в использовании библиотеки closedxml, которая упрощает работу с документами openxml, как в Office.Interop. Вы можете это сделать.