Генерация диаграммы путем обработки умных маркеров

Создание таблиц дизайнера

Таблица дизайнера - это простой файл Excel, созданный с помощью приложения Microsoft Excel или API Aspose.Cells, содержащий визуальное форматирование, формулы и умные маркеры, данные которых должны быть заполнены во время выполнения.

Для простоты мы будем создавать таблицу дизайнера с помощью API Aspose.Cells for Java, а затем обрабатываем ее в соответствии с динамически созданным источником данных для демонстрационных целей.

Java

 //Create an instance of Workbook

Workbook book = new Workbook();

//Access the first (default) Worksheet from the collection

Worksheet dataSheet = book.getWorksheets().get(0);

//Name the first Worksheet for referencing

dataSheet.setName("ChartData");

//Access the CellsCollection of ChartData Worksheet

Cells cells = dataSheet.getCells();

//Place the markers in the Worksheet according to desired layout

cells.get("A1").putValue("&=$Headers(horizontal)");

cells.get("A2").putValue("&=$Year2000(horizontal)");

cells.get("A3").putValue("&=$Year2005(horizontal)");

cells.get("A4").putValue("&=$Year2010(horizontal)");

cells.get("A5").putValue("&=$Year2015(horizontal)");

Если вы сохраните полученную таблицу в этой стадии, данные на листе будут выглядеть так.

todo:image_alt_text

Обработка таблицы дизайнера

Для обработки таблицы дизайнера необходимо иметь источник данных, соответствующий используемым в таблице дизайнера умным маркерам. Например, мы создали запись умного маркера как &=$Headers(horizontal), представляющую переменную по имени Headers, в то время как ключ (horizontal) подразумевает, что данные должны быть заполнены горизонтально.

Для демонстрации этого использования мы создадим источник данных с нуля и обработаем его в дизайнерской электронной таблице, созданной на предыдущем этапе. Однако в реальном времени данные могут уже быть доступны для дальнейшей обработки, поэтому вы можете пропустить создание источника данных, если данные уже доступны.

Java

 //Create string arrays which will serve as data sources to the smart markers

String[] headers = new String[]{"", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10", "Item 11", "Item 12"};

String[] year2000 = new String[]{"2000", "310", "0", "110", "15", "20", "25", "30", "1222", "200", "421", "210", "133"};

String[] year2005 = new String[]{"2005", "508", "0", "170", "280", "190", "400", "105", "132", "303", "199", "120", "100"};

String[] year2010 = new String[]{"2010", "0", "210", "230", "1420", "1530", "160", "170", "110", "199", "129", "120", "230"};

String[] year2015 = new String[]{"2015", "2818", "320", "340", "260", "210", "310", "220", "0", "0", "0", "0", "122"};

Обработка умных маркеров довольно проста, как показано ниже.

Java

 //Create an instance of WorkbookDesigner

WorkbookDesigner designer = new WorkbookDesigner();

//Set the Workbook property for the instance of WorkbookDesigner

designer.setWorkbook(book);

//Set data sources for smart markers

designer.setDataSource("Headers", headers);

designer.setDataSource("Year2000", year2000);

designer.setDataSource("Year2005", year2005);

designer.setDataSource("Year2010", year2010);

designer.setDataSource("Year2015", year2015);

//Process the designer spreadsheet against the provided data sources

designer.process();

Если вы сохраните электронную таблицу на этом этапе, данные будут выглядеть следующим образом.

todo:image_alt_text

Создание диаграммы

Как только данные на своем месте, все, что нам нужно сделать, - это создать диаграмму на основе источника данных. Чтобы сделать пример более простым, мы будем использовать метод Chart.setChartDataRange, чтобы нам не нужно было дополнительно настраивать диаграмму.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getDataDir(GenerateChartByProcessingSmartMarkers.class);
// Create an instance of Workbook
Workbook book = new Workbook();
// Access the first (default) Worksheet from the collection
Worksheet dataSheet = book.getWorksheets().get(0);
// Name the first Worksheet for referencing
dataSheet.setName("ChartData");
// Access the CellsCollection of ChartData Worksheet
Cells cells = dataSheet.getCells();
// Place the markers in the Worksheet according to desired layout
cells.get("A1").putValue("&=$Headers(horizontal)");
cells.get("A2").putValue("&=$Year2000(horizontal)");
cells.get("A3").putValue("&=$Year2005(horizontal)");
cells.get("A4").putValue("&=$Year2010(horizontal)");
cells.get("A5").putValue("&=$Year2015(horizontal)");
// Create string arrays which will serve as data sources to the smart markers
String[] headers = new String[] { "", "Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7",
"Item 8", "Item 9", "Item 10", "Item 11", "Item 12" };
String[] year2000 = new String[] { "2000", "310", "0", "110", "15", "20", "25", "30", "1222", "200", "421",
"210", "133" };
String[] year2005 = new String[] { "2005", "508", "0", "170", "280", "190", "400", "105", "132", "303", "199",
"120", "100" };
String[] year2010 = new String[] { "2010", "0", "210", "230", "1420", "1530", "160", "170", "110", "199", "129",
"120", "230" };
String[] year2015 = new String[] { "2015", "2818", "320", "340", "260", "210", "310", "220", "0", "0", "0", "0",
"122" };
// Create an instance of WorkbookDesigner
WorkbookDesigner designer = new WorkbookDesigner();
// Set the Workbook property for the instance of WorkbookDesigner
designer.setWorkbook(book);
// Set data sources for smart markers
designer.setDataSource("Headers", headers);
designer.setDataSource("Year2000", year2000);
designer.setDataSource("Year2005", year2005);
designer.setDataSource("Year2010", year2010);
designer.setDataSource("Year2015", year2015);
// Process the designer spreadsheet against the provided data sources
designer.process();
// Convert all string values of ChartData to numbers
// This is an additional step as we have imported the string values
dataSheet.getCells().convertStringToNumericValue();
// Save the number of rows & columns from the ChartData in separate variables
// These values will be used later to identify the chart's data range from ChartData
int chartRows = dataSheet.getCells().getMaxDataRow() + 1;
int chartCols = dataSheet.getCells().getMaxDataColumn() + 1;
// Add a new Worksheet of type Chart to Workbook
int chartSheetIdx = book.getWorksheets().add(SheetType.CHART);
// Access the newly added Worksheet via its index
Worksheet chartSheet = book.getWorksheets().get(chartSheetIdx);
// Name the Worksheet
chartSheet.setName("Chart");
// Add a chart of type ColumnStacked to newly added Worksheet
int chartIdx = chartSheet.getCharts().add(ChartType.COLUMN_STACKED, 0, 0, chartRows, chartCols);
// Access the newly added Chart via its index
Chart chart = chartSheet.getCharts().get(chartIdx);
// Identify the chart's data range
Range dataRange = dataSheet.getCells().createRange(0, 1, chartRows, chartCols - 1);
// Set the data range for the chart
chart.setChartDataRange(dataRange.getRefersTo(), false);
// Set the chart to size with window
chart.setSizeWithWindow(true);
// Set the format for the tick labels
chart.getValueAxis().getTickLabels().setNumberFormat("$###,### K");
// Set chart title
chart.getTitle().setText("Sales Summary");
// Set ChartSheet an active sheet
book.getWorksheets().setActiveSheetIndex(chartSheetIdx);
// Save the final result
book.save(dataDir + "report.xlsx");

Окончательная диаграмма выглядит следующим образом.

todo:image_alt_text