Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
.xls), так и современных именованных или пользовательских стилей сводных таблиц (предназначенных для файлов .xlsx, .xlsm и .xlsb). Используемый API зависит от формата файла, в который сохраняется рабочая книга, а не от формата, из которого она была загружена.
Aspose.Cells предоставляет два параллельных API стилей для сводных таблиц. Выбор между ними определяется форматом файла, в который сохраняется рабочая книга, а не форматом, из которого она читается. Рабочую книгу, загруженную из файла .xls, можно сохранить как .xlsx, и в этом случае применяется современный API стилей, а не устаревший.
PivotTable.PivotTableStyleType выбирает один из встроенных именованных стилей (светлые и тёмные темы, включая стили, добавленные в Excel 2017). Эти предустановки доступны только для чтения.PivotTable.PivotTableStyleName выбирает пользовательский стиль, который вы определяете самостоятельно через Worksheets.TableStyles.AddPivotTableStyle(...). Пользовательские стили необходимы в тех случаях, когда требуется изменить цвета, границы или шрифты за пределами возможностей предустановок.
Кроме того, PivotTable.FormatAll(Style) — это ярлык, который применяет один объект Style к каждой ячейке сводной таблицы, переопределяя всё, что было задано через любой из приведённых выше API имён стилей. Это полезно, когда требуется единообразный внешний вид вне зависимости от базовой темы.PivotTable.AutoFormatType принимает значение из перечисления Aspose.Cells.Pivot.PivotTableAutoFormatType. Доступные значения: Report1–Report10, Classic, а также Table1–Table10.
В следующем примере загружается новая рабочая книга, заполняются демонстрационные данные Fruit/Year/Amount, добавляется сводная таблица, применяется PivotTableAutoFormatType.Report5, и результат сохраняется как .xls.
Report1–Report10, Table1–Table10) были разработаны в классическом Excel для одномерных сводных таблиц только с полями строк и значениями — в них нет встроенного стилевого оформления для заголовков полей столбцов. Если вашей сводной таблице нужны поля столбцов, используйте современные предустановки PivotTableStyleType из Сценария 2, которые предназначены для двухмерной компоновки современного Excel.
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
// Создать новую рабочую книгу
Workbook workbook;
// Получить первый рабочий лист
Worksheet sheet = workbook.GetWorksheets().Get(0);
// Заполнить исходные данные строкой заголовка (Fruit, Year, Amount)
// и 9 строками данных, охватывающими grape, blueberry, kiwi, cherry за 2020 и 2021 годы
sheet.GetCells().Get(0, 0).PutValue(u"Fruit");
sheet.GetCells().Get(0, 1).PutValue(u"Year");
sheet.GetCells().Get(0, 2).PutValue(u"Amount");
sheet.GetCells().Get(1, 0).PutValue(u"grape");
sheet.GetCells().Get(1, 1).PutValue(2020);
sheet.GetCells().Get(1, 2).PutValue(50);
sheet.GetCells().Get(2, 0).PutValue(u"blueberry");
sheet.GetCells().Get(2, 1).PutValue(2020);
sheet.GetCells().Get(2, 2).PutValue(30);
sheet.GetCells().Get(3, 0).PutValue(u"kiwi");
sheet.GetCells().Get(3, 1).PutValue(2020);
sheet.GetCells().Get(3, 2).PutValue(25);
sheet.GetCells().Get(4, 0).PutValue(u"cherry");
sheet.GetCells().Get(4, 1).PutValue(2020);
sheet.GetCells().Get(4, 2).PutValue(40);
sheet.GetCells().Get(5, 0).PutValue(u"grape");
sheet.GetCells().Get(5, 1).PutValue(2021);
sheet.GetCells().Get(5, 2).PutValue(60);
sheet.GetCells().Get(6, 0).PutValue(u"blueberry");
sheet.GetCells().Get(6, 1).PutValue(2021);
sheet.GetCells().Get(6, 2).PutValue(35);
sheet.GetCells().Get(7, 0).PutValue(u"kiwi");
sheet.GetCells().Get(7, 1).PutValue(2021);
sheet.GetCells().Get(7, 2).PutValue(28);
sheet.GetCells().Get(8, 0).PutValue(u"cherry");
sheet.GetCells().Get(8, 1).PutValue(2021);
sheet.GetCells().Get(8, 2).PutValue(45);
sheet.GetCells().Get(9, 0).PutValue(u"grape");
sheet.GetCells().Get(9, 1).PutValue(2020);
sheet.GetCells().Get(9, 2).PutValue(45);
// Добавить сводную таблицу в ячейку назначения E3 с именем "Pivot1", используя исходный диапазон A1:C10
int pivotIndex = sheet.GetPivotTables().Add(u"A1:C10", u"E3", u"Pivot1");
PivotTable pivotTable = sheet.GetPivotTables().Get(pivotIndex);
// Назначить поля: Fruit -> Строки, Amount -> Данные
pivotTable.AddFieldToArea(PivotFieldType::Row, u"Fruit");
pivotTable.AddFieldToArea(PivotFieldType::Data, u"Amount");
// Применить устаревший предустановленный автоформат XLS "Report5"
pivotTable.SetAutoFormatType(PivotTableAutoFormatType::Report5);
// Сохранить рабочую книгу в устаревшем формате .xls
workbook.Save(u"output.xls");
Aspose::Cells::Cleanup();
return 0;
}
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
Workbook workbook;
Worksheet worksheet = workbook.GetWorksheets().Get(0);
Cells cells = worksheet.GetCells();
cells.Get(u"A1").PutValue(u"Fruit");
cells.Get(u"B1").PutValue(u"Year");
cells.Get(u"C1").PutValue(u"Amount");
cells.Get(u"A2").PutValue(u"Grape");
cells.Get(u"B2").PutValue(2020);
cells.Get(u"C2").PutValue(100);
cells.Get(u"A3").PutValue(u"Blueberry");
cells.Get(u"B3").PutValue(2020);
cells.Get(u"C3").PutValue(150);
cells.Get(u"A4").PutValue(u"Kiwi");
cells.Get(u"B4").PutValue(2020);
cells.Get(u"C4").PutValue(200);
cells.Get(u"A5").PutValue(u"Cherry");
cells.Get(u"B5").PutValue(2020);
cells.Get(u"C5").PutValue(180);
cells.Get(u"A6").PutValue(u"Grape");
cells.Get(u"B6").PutValue(2021);
cells.Get(u"C6").PutValue(120);
cells.Get(u"A7").PutValue(u"Blueberry");
cells.Get(u"B7").PutValue(2021);
cells.Get(u"C7").PutValue(170);
cells.Get(u"A8").PutValue(u"Kiwi");
cells.Get(u"B8").PutValue(2021);
cells.Get(u"C8").PutValue(210);
cells.Get(u"A9").PutValue(u"Cherry");
cells.Get(u"B9").PutValue(2021);
cells.Get(u"C9").PutValue(190);
cells.Get(u"A10").PutValue(u"Grape");
cells.Get(u"B10").PutValue(2021);
cells.Get(u"C10").PutValue(130);
int pivotIndex = worksheet.GetPivotTables().Add(u"A1:C10", u"E3", u"Pivot1");
PivotTable pivotTable = worksheet.GetPivotTables().Get(pivotIndex);
pivotTable.AddFieldToArea(PivotFieldType::Row, u"Fruit");
pivotTable.AddFieldToArea(PivotFieldType::Column, u"Year");
pivotTable.AddFieldToArea(PivotFieldType::Data, u"Amount");
pivotTable.SetPivotTableStyleType(PivotTableStyleType::PivotTableStyleDark1);
workbook.Save(u"output.xlsx");
Aspose::Cells::Cleanup();
return 0;
}
Встроенные предустановки не могут быть изменены. Всякий раз, когда требуется переопределить цвета, границы или шрифты, необходимо определить пользовательский стиль сводной таблицы. Рабочий процесс состоит из трёх шагов:
TableStyles рабочей книги через Worksheets.TableStyles.AddPivotTableStyle(string name). Метод возвращает индекс вновь созданного стиля.WholeTable или GrandTotalRow) через TableStyle.TableStyleElements.Add(TableStyleElementType), затем назначьте каждому элементу Style через TableStyleElement.SetElementStyle(Style).PivotTable.PivotTableStyleName равным имени стиля. Здесь не следует использовать PivotTableStyleType, так как это свойство выбирает встроенные предустановки.PivotTableStyleName и PivotTableStyleType не взаимозаменяемы. Используйте PivotTableStyleType для встроенных предустановок и PivotTableStyleName для пользовательских стилей, определённых через AddPivotTableStyle. Установка обоих свойств безвредна, но отображается только то, которое соответствует предполагаемому источнику.
Доступные значения TableStyleElementType включают WholeTable, FirstRow, LastRow, FirstColumn, LastColumn, GrandTotalRow, GrandTotalColumn, PageFieldLabels и PageFieldValues.
В следующем примере определяется пользовательский стиль сводной таблицы с тонкой чёрной границей для WholeTable и жирным красным шрифтом для GrandTotalRow, затем он применяется через PivotTableStyleName, и результат сохраняется как .xlsx.
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
Workbook workbook;
Worksheet worksheet = workbook.GetWorksheets().Get(0);
Cells cells = worksheet.GetCells();
// Заполнение исходных данных: строка заголовка + 9 строк данных (A1:C10)
cells.Get(u"A1").PutValue(u"Fruit");
cells.Get(u"B1").PutValue(u"Year");
cells.Get(u"C1").PutValue(u"Amount");
cells.Get(u"A2").PutValue(u"Grape");
cells.Get(u"B2").PutValue(2020);
cells.Get(u"C2").PutValue(100);
cells.Get(u"A3").PutValue(u"Blueberry");
cells.Get(u"B3").PutValue(2020);
cells.Get(u"C3").PutValue(200);
cells.Get(u"A4").PutValue(u"Kiwi");
cells.Get(u"B4").PutValue(2020);
cells.Get(u"C4").PutValue(300);
cells.Get(u"A5").PutValue(u"Cherry");
cells.Get(u"B5").PutValue(2020);
cells.Get(u"C5").PutValue(400);
cells.Get(u"A6").PutValue(u"Grape");
cells.Get(u"B6").PutValue(2021);
cells.Get(u"C6").PutValue(500);
cells.Get(u"A7").PutValue(u"Blueberry");
cells.Get(u"B7").PutValue(2021);
cells.Get(u"C7").PutValue(600);
cells.Get(u"A8").PutValue(u"Kiwi");
cells.Get(u"B8").PutValue(2021);
cells.Get(u"C8").PutValue(700);
cells.Get(u"A9").PutValue(u"Cherry");
cells.Get(u"B9").PutValue(2021);
cells.Get(u"C9").PutValue(800);
cells.Get(u"A10").PutValue(u"Grape");
cells.Get(u"B10").PutValue(2021);
cells.Get(u"C10").PutValue(900);
// Добавление сводной таблицы с источником A1:C10, привязанной к E3, с именем "Pivot1"
int pivotIndex = worksheet.GetPivotTables().Add(u"A1:C10", u"E3", u"Pivot1");
PivotTable pivotTable = worksheet.GetPivotTables().Get(pivotIndex);
pivotTable.AddFieldToArea(PivotFieldType::Row, u"Fruit");
pivotTable.AddFieldToArea(PivotFieldType::Column, u"Year");
pivotTable.AddFieldToArea(PivotFieldType::Data, u"Amount");
// Шаг 1: регистрация нового пользовательского стиля сводной таблицы и сохранение его индекса
int styleIndex = workbook.GetWorksheets().GetTableStyles().AddPivotTableStyle(u"CustomPivotStyle");
TableStyle tableStyle = workbook.GetWorksheets().GetTableStyles().Get(styleIndex);
// Шаг 2: добавление элемента WholeTable и применение тонких черных границ со всех четырех сторон
int wholeTableElementIndex = tableStyle.GetTableStyleElements().Add(TableStyleElementType::WholeTable);
TableStyleElement wholeTableElement = tableStyle.GetTableStyleElements().Get(wholeTableElementIndex);
Style wholeTableStyle = workbook.CreateStyle();
wholeTableStyle.GetBorders().Get(BorderType::TopBorder).SetLineStyle(CellBorderType::Thin);
wholeTableStyle.GetBorders().Get(BorderType::TopBorder).SetColor(Color::Black());
wholeTableStyle.GetBorders().Get(BorderType::BottomBorder).SetLineStyle(CellBorderType::Thin);
wholeTableStyle.GetBorders().Get(BorderType::BottomBorder).SetColor(Color::Black());
wholeTableStyle.GetBorders().Get(BorderType::LeftBorder).SetLineStyle(CellBorderType::Thin);
wholeTableStyle.GetBorders().Get(BorderType::LeftBorder).SetColor(Color::Black());
wholeTableStyle.GetBorders().Get(BorderType::RightBorder).SetLineStyle(CellBorderType::Thin);
wholeTableStyle.GetBorders().Get(BorderType::RightBorder).SetColor(Color::Black());
wholeTableElement.SetElementStyle(wholeTableStyle);
// Шаг 3: добавление элемента GrandTotalRow и применение жирного красного шрифта
int grandTotalElementIndex = tableStyle.GetTableStyleElements().Add(TableStyleElementType::GrandTotalRow);
TableStyleElement grandTotalElement = tableStyle.GetTableStyleElements().Get(grandTotalElementIndex);
Style grandTotalStyle = workbook.CreateStyle();
grandTotalStyle.GetFont().SetIsBold(true);
grandTotalStyle.GetFont().SetColor(Color::Red());
grandTotalElement.SetElementStyle(grandTotalStyle);
// Шаг 4: применение пользовательского стиля по имени (НЕ через PivotTableStyleType, который предназначен для встроенных предустановок)
pivotTable.SetPivotTableStyleName(u"CustomPivotStyle");
workbook.Save(u"output.xlsx");
Aspose::Cells::Cleanup();
return 0;
}
PivotTable.FormatAll(Style) — это ярлык, который применяет один объект Style к каждой ячейке сводной таблицы, включая область данных, заголовки строк и столбцов, а также итоги. Всё, что было ранее установлено через PivotTableStyleType или PivotTableStyleName, переопределяется.
FormatAll переопределяет и PivotTableStyleType, и PivotTableStyleName. Используйте его только тогда, когда требуется единообразный, независящий от темы внешний вид по всей сводной таблице.
В следующем примере создаётся Style с жёлтой сплошной заливкой, жирным тёмно-синим шрифтом и тонкими чёрными границами со всех сторон, затем он применяется с помощью FormatAll, и результат сохраняется как .xlsx.
#include "Aspose.Cells.h"
#include <string>
using namespace Aspose::Cells;
using namespace Aspose::Cells::Pivot;
int main() {
Aspose::Cells::Startup();
Workbook wb;
Worksheet worksheet = wb.GetWorksheets().Get(0);
// Строка заголовка
worksheet.GetCells().Get(u"A1").PutValue(u"Fruit");
worksheet.GetCells().Get(u"B1").PutValue(u"Year");
worksheet.GetCells().Get(u"C1").PutValue(u"Amount");
// Строки данных
worksheet.GetCells().Get(u"A2").PutValue(u"Grape");
worksheet.GetCells().Get(u"B2").PutValue(2020);
worksheet.GetCells().Get(u"C2").PutValue(5000);
worksheet.GetCells().Get(u"A3").PutValue(u"Blueberry");
worksheet.GetCells().Get(u"B3").PutValue(2020);
worksheet.GetCells().Get(u"C3").PutValue(3000);
worksheet.GetCells().Get(u"A4").PutValue(u"Kiwi");
worksheet.GetCells().Get(u"B4").PutValue(2020);
worksheet.GetCells().Get(u"C4").PutValue(4000);
worksheet.GetCells().Get(u"A5").PutValue(u"Cherry");
worksheet.GetCells().Get(u"B5").PutValue(2020);
worksheet.GetCells().Get(u"C5").PutValue(2000);
worksheet.GetCells().Get(u"A6").PutValue(u"Grape");
worksheet.GetCells().Get(u"B6").PutValue(2021);
worksheet.GetCells().Get(u"C6").PutValue(6000);
worksheet.GetCells().Get(u"A7").PutValue(u"Blueberry");
worksheet.GetCells().Get(u"B7").PutValue(2021);
worksheet.GetCells().Get(u"C7").PutValue(3500);
worksheet.GetCells().Get(u"A8").PutValue(u"Kiwi");
worksheet.GetCells().Get(u"B8").PutValue(2021);
worksheet.GetCells().Get(u"C8").PutValue(4500);
worksheet.GetCells().Get(u"A9").PutValue(u"Cherry");
worksheet.GetCells().Get(u"B9").PutValue(2021);
worksheet.GetCells().Get(u"C9").PutValue(2500);
worksheet.GetCells().Get(u"A10").PutValue(u"Grape");
worksheet.GetCells().Get(u"B10").PutValue(2021);
worksheet.GetCells().Get(u"C10").PutValue(5500);
// Добавление сводной таблицы: исходный диапазон A1:C10, ячейка назначения E3, имя "Pivot1"
int pivotIndex = worksheet.GetPivotTables().Add(u"A1:C10", u"E3", u"Pivot1");
PivotTable pivotTable = worksheet.GetPivotTables().Get(pivotIndex);
// Назначение полей сводной таблицы
pivotTable.AddFieldToArea(PivotFieldType::Row, u"Fruit");
pivotTable.AddFieldToArea(PivotFieldType::Column, u"Year");
pivotTable.AddFieldToArea(PivotFieldType::Data, u"Amount");
// Создание стиля, который будет применён к каждой ячейке сводной таблицы
Style style = wb.CreateStyle();
style.SetForegroundColor(Color::Yellow());
style.SetPattern(BackgroundType::Solid);
style.GetFont().SetIsBold(true);
style.GetFont().SetColor(Color::DarkBlue());
style.GetBorders().Get(BorderType::TopBorder).SetLineStyle(CellBorderType::Thin);
style.GetBorders().Get(BorderType::TopBorder).SetColor(Color::Black());
style.GetBorders().Get(BorderType::BottomBorder).SetLineStyle(CellBorderType::Thin);
style.GetBorders().Get(BorderType::BottomBorder).SetColor(Color::Black());
style.GetBorders().Get(BorderType::LeftBorder).SetLineStyle(CellBorderType::Thin);
style.GetBorders().Get(BorderType::LeftBorder).SetColor(Color::Black());
style.GetBorders().Get(BorderType::RightBorder).SetLineStyle(CellBorderType::Thin);
style.GetBorders().Get(BorderType::RightBorder).SetColor(Color::Black());
// Применение FormatAll
pivotTable.FormatAll(style);
// Сохранение книги
wb.Save(u"output.xlsx");
Aspose::Cells::Cleanup();
return 0;
}
Выбор API стилей зависит от формата файла, в который выполняется сохранение. Используйте приведённую ниже таблицу в качестве краткого справочника.
| Целевой формат файла | Используемый API | Примечания |
|---|---|---|
.xls (устаревший) |
PivotTable.AutoFormatType |
Значения из Aspose.Cells.Pivot.PivotTableAutoFormatType (например, Report1–Report10, Classic, Table1–Table10). Игнорируется при сохранении в современные форматы. |
.xlsx / .xlsm / .xlsb (современный, встроенный стиль) |
PivotTable.PivotTableStyleType |
Значения из Aspose.Cells.PivotTableStyleType (светлые/тёмные темы, включая дополнения Excel 2017). |
.xlsx / .xlsm / .xlsb (современный, пользовательский стиль) |
PivotTable.PivotTableStyleName + Worksheets.TableStyles.AddPivotTableStyle(...) |
Используйте, когда встроенных предустановок недостаточно. Настройка через TableStyleElement.SetElementStyle(...). |
| Любой формат (единообразное переопределение) | PivotTable.FormatAll(Style) |
Ярлык, переопределяющий все остальные настройки стилей по всей сводной таблице. |
В случае сомнений сохраняйте как .xlsx и используйте PivotTableStyleType для встроенных тем или PivotTableStyleName для пользовательских тем. |
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.