Создание документа Excel с помощью OpenXml sdk 2.0
Я создал документ Excel с помощью OpenXML SDK 2.0, теперь мне нужно стилизовать его, но я не могу.
Я не знаю, как рисовать цвет фона или изменять размер шрифта в разных ячейках.
Мой код для создания ячейки:
- Как читать данные из электронной таблицы с помощью OpenXML Format SDK?
- Несколько панелей в Excel 2003 Таблица XML
- Цвет текста в тексте ML (цвет)
- Создание API Excel
- Необходимо вручную установить разметку страницы вручную в файле Excel
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; }
- Преобразование Excel-таблицы Excel в xlsx
- Создает ли Excel файлы, которые используют Rich Text Inline в ячейке?
- Добавить страницу результатов SUM () Excel в XLST?
- Экспорт уравнений AsciiMathML в формат Excel
- SpreadsheetML - Ошибки и проверка
- OpenXML Выбор определенного столбца
- Используйте SSIS для заполнения книги Excel, созданной с использованием OOXML
- Как развернуть разметку spreadsheetML для регулярной разметки матрицы с использованием XSLT 1.0
Примечание. 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 со всеми форматами, которые вам нужны, а затем указать индекс стиля в вашей программе.