Создание документа Excel с помощью OpenXml sdk 2.0

Я создал документ Excel с помощью OpenXML SDK 2.0, теперь мне нужно стилизовать его, но я не могу.

Я не знаю, как рисовать цвет фона или изменять размер шрифта в разных ячейках.

Мой код для создания ячейки:

private static Cell CreateTextCell(string header, string text, UInt32Value index) { Cell c = new Cell(); c.DataType = CellValues.InlineString; c.CellReference = header + index; InlineString inlineString = new InlineString(); DocumentFormat.OpenXml.Spreadsheet.Text t = new DocumentFormat.OpenXml.Spreadsheet.Text(); t.Text = text; inlineString.AppendChild(t); c.AppendChild(inlineString); return c; } 

Примечание. SDK OpenXML 2.0 в настоящее время находится в CTP и не лицензируется для использования в производстве до Office2010.

Моя общая методология для работы с OpenXML SDK заключается в создании пустого документа и документа с помощью только тех функций, которые вы хотели бы узнать, как реализовать (например, цвет фона) и использовать OpenXmlDiff SDK, чтобы узнать, какие изменения необходимо внести в реализацию функция.

Если вы создаете документ с нуля, вы можете использовать DocumentReflector для генерации кода для объекта Stylesheet по умолчанию, а затем добавить нужные стили.

Начиная со значения по умолчанию:

 new Stylesheet( new Fonts( new Font( new FontSize() { Val = 10D }, new Color() { Theme = (UInt32Value)1U }, new FontName() { Val = "Arial" }, new FontFamilyNumbering() { Val = 2 }) ) { Count = (UInt32Value)1U }, new Fills( new Fill( new PatternFill() { PatternType = PatternValues.None }), new Fill( new PatternFill() { PatternType = PatternValues.Gray125 }) ) { Count = (UInt32Value)2U }, new Borders(... ... ... new CellFormats( new CellFormat() { NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U }) { Count = (UInt32Value)1U }, ... 

Я добавил новый шрифт размером 12 и новый Fill с красным фоном (индексированное значение 64) и добавил новые CellFormats, которые ссылаются на индекс нового шрифта и заливки. (Обязательно обновите счетчики тоже)

 new Stylesheet( new Fonts( new Font( new FontSize() { Val = 10D }, new Color() { Theme = (UInt32Value)1U }, new FontName() { Val = "Arial" }, new FontFamilyNumbering() { Val = 2 }), new Font( new FontSize() { Val = 12D }, new Color() { Theme = (UInt32Value)1U }, new FontName() { Val = "Arial" }, new FontFamilyNumbering() { Val = 2 }) ) { Count = (UInt32Value)2U }, new Fills( new Fill( new PatternFill() { PatternType = PatternValues.None }), new Fill( new PatternFill() { PatternType = PatternValues.Gray125 }), new Fill( new PatternFill() { PatternType = PatternValues.Solid, ForegroundColor = new ForegroundColor() { Rgb = "FFFF0000" }, BackgroundColor = new BackgroundColor() { Indexed = 64 } }) ) { Count = (UInt32Value)3U }, new Borders( new Border( new LeftBorder(), new RightBorder(), new TopBorder(), new BottomBorder(), new DiagonalBorder()) ) { Count = (UInt32Value)1U }, new CellStyleFormats( new CellFormat() { NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U } ) { Count = (UInt32Value)1U }, new CellFormats( new CellFormat() { NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U }, new CellFormat() { NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)1U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U }, new CellFormat() { NumberFormatId = (UInt32Value)0U, FontId = (UInt32Value)0U, FillId = (UInt32Value)2U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U } ) { Count = (UInt32Value)3U }, new CellStyles( new CellStyle() { Name = "Normal", FormatId = (UInt32Value)0U, BuiltinId = (UInt32Value)0U } ) { Count = (UInt32Value)1U }, new DifferentialFormats() { Count = (UInt32Value)0U }, new TableStyles() { Count = (UInt32Value)0U, DefaultTableStyle = "TableStyleMedium9", DefaultPivotStyle = "PivotStyleLight16" }); 

Затем, в коде, я применяю индекс CellStyle к ячейкам, которые я хочу отформатировать: (Уже были данные в ячейках A2 и A3. Cell A2 получает больший размер, A3 получает красный фон)

 SheetData sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>(); sheetData.Descendants<Row>().Where(r => r.RowIndex == 2U).First().Descendants<Cell>().First().StyleIndex = 1U; sheetData.Descendants<Row>().Where(r => r.RowIndex == 3U).First().Descendants<Cell>().First().StyleIndex = 2U; 

Большое спасибо за эту статью.

После многих проблем (и Googling) мне удалось создать очень простой в использовании класс C #, который берет DataSet и имя файла и создает Office 2007. .xlsx, содержащий данные DataSet.

Внезапно процесс добавления функции к вашему приложению в «Экспорт в Excel» становится таким же простым, как …

 DataSet ds = CreateSampleData(); // Your code here ! string excelFilename = "C:\\Sample.xlsx"; CreateExcelFile.CreateExcelDocument(ds, excelFilename); 

Я опубликовал полный исходный код, а также пример его использования на следующем веб-сайте.

Это приложение Visual Studio 2008 C # WinForms, но вы можете позволить Visual Studio обновить этот проект, если вы используете VS2010.

Наслаждаться.

http://www.mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

Как указать стиль ячейки?

 new Cell() { CellReference = "B6", StyleIndex = 11U } 

Здесь «11U» представляет собой индекс на основе нуля StylesPart.Stylesheet.CellFormats, в котором каждый CellFormat определяет комбинацию стилей NumberFormat, Font, Fill и Border.

Вам не нужно добавлять все стили по программе, вместо этого вы можете создать файл шаблона xlsx со всеми форматами, которые вам нужны, а затем указать индекс стиля в вашей программе.

  • Parsing SpreadsheetML Использование Perl
  • Преобразование XSLT в Excel
  • Как вы используете OpenXML API для чтения таблицы из электронной таблицы Excel?
  • Укажите ширину столбца и высоту строки для excel, используя таблицу html.
  • Декодировать содержимое XML-таблицы в клипе, создаваемом Excel
  • Импорт данных из таблицы Google в Excel
  • Файл, который обычно открывает наше приложение, но вернется в Excel
  • Как сгенерировать образцы SpreasheetML для всех трех параметров совместимости дат из Excel 2010?
  • Стили ячеек в электронной таблице OpenXML (SpreadsheetML)
  • Стиль для обернутого текста с помощью таблицы
  • В чем разница между <ct = "str"> и <c> <is> в Office Open XML?
  • Давайте будем гением компьютера.