Я хочу применить формат% (процентного числа), используя открытый XML С#
У меня числовое значение 3.6, что я хочу отобразить это число в excel как "3,6%.
Как мне это достичь?
Я хочу применить формат% (процентного числа), используя открытый XML С#
У меня числовое значение 3.6, что я хочу отобразить это число в excel как "3,6%.
Как мне это достичь?
WorkbookStylesPart sp = workbookPart.AddNewPart<WorkbookStylesPart>();
Создайте таблицу стилей,
sp.Stylesheet = new Stylesheet();
Создайте нумерацию,
sp.Stylesheet.NumberingFormats = new NumberingFormats();
// #.##% is also Excel style index 1
NumberingFormat nf2decimal = new NumberingFormat();
nf2decimal.NumberFormatId = UInt32Value.FromUInt32(3453);
nf2decimal.FormatCode = StringValue.FromString("0.0%");
sp.Stylesheet.NumberingFormat.Append(nf2decimal);
Создайте формат ячейки и примените идентификатор формата нумерации
cellFormat = new CellFormat();
cellFormat.FontId = 0;
cellFormat.FillId = 0;
cellFormat.BorderId = 0;
cellFormat.FormatId = 0;
cellFormat.NumberFormatId = nf2decimal.NumberFormatId;
cellFormat.ApplyNumberFormat = BooleanValue.FromBoolean(true);
cellFormat.ApplyFont = true;
//append cell format for cells of header row
sp.Stylesheet.CellFormats.AppendChild<CellFormat>(cellFormat);
//update font count
sp.Stylesheet.CellFormats.Count = UInt32Value.FromUInt32((uint)sp.Stylesheet.CellFormats.ChildElements.Count);
//save the changes to the style sheet part
sp.Stylesheet.Save();
и когда вы добавите значение в ячейку, выполните следующую интеграцию с центральным кодом и примените индекс стиля в моем случае у меня было три индекса стиля, поэтому 3 был моим индексом индекса процента i.e 2, так как индексы начинаются с 0
string val = Convert.ToString(Convert.ToDecimal(value)/100);
Cell cell = new Cell();
cell.DataType = new EnumValue<CellValues>(CellValues.Number);
cell.CellValue = new CellValue(val);
cell.StyleIndex = 2;
row.Append(cell);
К сожалению, нет прямого ответа. Если вы загружаете инструмент производительности OpenXML для Microsoft Office, вы можете проанализировать простую таблицу и посмотреть, как она форматирует число. Чтобы сделать то, что вы хотите, вам нужно:
Уф!
В общем случае лучше посмотреть на ClosedXML на http://closedxml.codeplex.com/ (ужасное имя). Это библиотека с открытым исходным кодом (NOT GPL! - проверка лицензии), которая добавляет полезные расширения на OpenXML. Чтобы форматировать ячейку рабочего листа, вы должны:
worksheet.Cell(row, col).Value = "0.036";
worksheet.Cell(row, col).Style.NumberFormat.Format = "0.0%";
(из http://closedxml.codeplex.com/wikipage?title=Styles%20-%20NumberFormat&referringTitle=Documentation)
UPDATE ClosedXML переместился в GitHub на https://github.com/ClosedXML/ClosedXML
Excel содержит предопределенные форматы для форматирования строк различными способами. Атрибут s
для элемента ячейки будет ссылаться на стиль, который будет относиться к числовому формату, который будет соответствовать желаемому процентному формату. См. Этот вопрос/ответ для получения дополнительной информации.
Вот объект CellFormat, который вам нужно создать, чтобы на ваш номер была применена маска 0.00%. В этом случае вам нужен предопределенный формат 10 или 0.00%:
CellFormat cellFormat1 = new CellFormat(){ NumberFormatId = (UInt32Value)10U, FontId = (UInt32Value)0U, FillId = (UInt32Value)0U, BorderId = (UInt32Value)0U, FormatId = (UInt32Value)0U, ApplyNumberFormat = true };
Вот быстрый способ вставки CellFormat в книгу:
CellFormats cellFormats = workbookPart.WorkbookStylesPart.Stylesheet.Elements<CellFormats>().First();
cellFormats.Append(cellFormat);
uint styleIndex = (uint)cellFormats.Count++;
Затем вам понадобится получить ячейку с 3,6 в ней и установить ее атрибут s
(StyleIndex) в только что вставленный формат ячейки:
Cell cell = workSheetPart.Worksheet.Descendants<Cell>().SingleOrDefault(c => cellAddress.Equals("A1"));
cell.StyleIndex = styleIndex;
Вы можете сделать это простым способом. Если вы хотите применить его в отдельной ячейке, сделайте это,
worksheet.Cell(9, 10).Style.NumberFormat.Format = "#,##0.00\\%";
И если вы хотите применить его к диапазону ячеек, сделайте это,
worksheet.Range(9, 10, 15, 10).Style.NumberFormat.Format = "#,##0.00\\%";
вы также можете найти больше форматов Здесь, а также вы можете найти то же самое из Excel.