-
-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
27 changed files
with
5,804 additions
and
240 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,386 @@ | ||
/* | ||
* A demo of an various Excel chart data label features that are available via | ||
* a libxlsxwriter chart. | ||
* | ||
* Copyright 2014-2020, John McNamara, jmcnamara@cpan.org | ||
* | ||
*/ | ||
|
||
#include "xlsxwriter.h" | ||
|
||
/* | ||
* Create a worksheet with examples charts. | ||
*/ | ||
int main() { | ||
|
||
lxw_workbook *workbook = workbook_new("chart_data_labels.xlsx"); | ||
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL); | ||
|
||
/* Add a bold format to use to highlight the header cells. */ | ||
lxw_format *bold = workbook_add_format(workbook); | ||
format_set_bold(bold); | ||
|
||
/* Some chart positioning options. */ | ||
lxw_chart_options options = {.x_offset = 25, .y_offset = 10}; | ||
|
||
/* Write some data for the chart. */ | ||
worksheet_write_string(worksheet, 0, 0, "Number", bold); | ||
worksheet_write_number(worksheet, 1, 0, 2, NULL); | ||
worksheet_write_number(worksheet, 2, 0, 3, NULL); | ||
worksheet_write_number(worksheet, 3, 0, 4, NULL); | ||
worksheet_write_number(worksheet, 4, 0, 5, NULL); | ||
worksheet_write_number(worksheet, 5, 0, 6, NULL); | ||
worksheet_write_number(worksheet, 6, 0, 7, NULL); | ||
|
||
worksheet_write_string(worksheet, 0, 1, "Data", bold); | ||
worksheet_write_number(worksheet, 1, 1, 20, NULL); | ||
worksheet_write_number(worksheet, 2, 1, 10, NULL); | ||
worksheet_write_number(worksheet, 3, 1, 20, NULL); | ||
worksheet_write_number(worksheet, 4, 1, 30, NULL); | ||
worksheet_write_number(worksheet, 5, 1, 40, NULL); | ||
worksheet_write_number(worksheet, 6, 1, 30, NULL); | ||
|
||
worksheet_write_string(worksheet, 0, 2, "Text", bold); | ||
worksheet_write_string(worksheet, 1, 2, "Jan", NULL); | ||
worksheet_write_string(worksheet, 2, 2, "Feb", NULL); | ||
worksheet_write_string(worksheet, 3, 2, "Mar", NULL); | ||
worksheet_write_string(worksheet, 4, 2, "Apr", NULL); | ||
worksheet_write_string(worksheet, 5, 2, "May", NULL); | ||
worksheet_write_string(worksheet, 6, 2, "Jun", NULL); | ||
|
||
|
||
/* | ||
* Chart 1. Example with standard data labels. | ||
*/ | ||
lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); | ||
|
||
/* Add a chart title. */ | ||
chart_title_set_name(chart, "Chart with standard data labels"); | ||
|
||
/* Add a data series to the chart. */ | ||
lxw_chart_series *series = chart_add_series(chart, "=Sheet1!$A$2:$A$7", | ||
"=Sheet1!$B$2:$B$7"); | ||
|
||
/* Add the series data labels. */ | ||
chart_series_set_labels(series); | ||
|
||
/* Turn off the legend. */ | ||
chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE); | ||
|
||
/* Insert the chart into the worksheet. */ | ||
worksheet_insert_chart_opt(worksheet, CELL("D2"), chart, &options); | ||
|
||
|
||
/* | ||
* Chart 2. Example with value and category data labels. | ||
*/ | ||
chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); | ||
|
||
/* Add a chart title. */ | ||
chart_title_set_name(chart, "Category and Value data labels"); | ||
|
||
/* Add a data series to the chart. */ | ||
series = chart_add_series(chart, "=Sheet1!$A$2:$A$7", | ||
"=Sheet1!$B$2:$B$7"); | ||
|
||
/* Add the series data labels. */ | ||
chart_series_set_labels(series); | ||
|
||
/* Turn on Value and Category labels. */ | ||
chart_series_set_labels_options(series, LXW_FALSE, LXW_TRUE, LXW_TRUE); | ||
|
||
/* Turn off the legend. */ | ||
chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE); | ||
|
||
/* Insert the chart into the worksheet. */ | ||
worksheet_insert_chart_opt(worksheet, CELL("D18"), chart, &options); | ||
|
||
|
||
/* | ||
* Chart 3. Example with standard data labels with different font. | ||
*/ | ||
chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); | ||
|
||
/* Add a chart title. */ | ||
chart_title_set_name(chart, "Data labels with user defined font"); | ||
|
||
/* Add a data series to the chart. */ | ||
series = chart_add_series(chart, "=Sheet1!$A$2:$A$7", | ||
"=Sheet1!$B$2:$B$7"); | ||
|
||
/* Add the series data labels. */ | ||
chart_series_set_labels(series); | ||
|
||
lxw_chart_font font1 = {.bold = LXW_TRUE, .color = LXW_COLOR_RED, .rotation = -30}; | ||
chart_series_set_labels_font(series, &font1); | ||
|
||
/* Turn off the legend. */ | ||
chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE); | ||
|
||
/* Insert the chart into the worksheet. */ | ||
worksheet_insert_chart_opt(worksheet, CELL("D34"), chart, &options); | ||
|
||
|
||
/* | ||
* Chart 4. Example with standard data labels and formatting. | ||
*/ | ||
chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); | ||
|
||
/* Add a chart title. */ | ||
chart_title_set_name(chart, "Data labels with formatting"); | ||
|
||
/* Add a data series to the chart. */ | ||
series = chart_add_series(chart, "=Sheet1!$A$2:$A$7", | ||
"=Sheet1!$B$2:$B$7"); | ||
|
||
/* Add the series data labels. */ | ||
chart_series_set_labels(series); | ||
|
||
/* Set the border/line and fill for the data labels. */ | ||
lxw_chart_line line1 = {.color = LXW_COLOR_RED}; | ||
lxw_chart_fill fill1 = {.color = LXW_COLOR_YELLOW}; | ||
|
||
chart_series_set_labels_line(series, &line1); | ||
chart_series_set_labels_fill(series, &fill1); | ||
|
||
/* Turn off the legend. */ | ||
chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE); | ||
|
||
/* Insert the chart into the worksheet. */ | ||
worksheet_insert_chart_opt(worksheet, CELL("D50"), chart, &options); | ||
|
||
|
||
/* | ||
* Chart 5.Example with custom string data labels. | ||
*/ | ||
chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); | ||
|
||
/* Add a chart title. */ | ||
chart_title_set_name(chart, "Chart with custom string data labels"); | ||
|
||
/* Add a data series to the chart. */ | ||
series = chart_add_series(chart, "=Sheet1!$A$2:$A$7", | ||
"=Sheet1!$B$2:$B$7"); | ||
|
||
/* Add the series data labels. */ | ||
chart_series_set_labels(series); | ||
|
||
/* Create some custom labels. */ | ||
lxw_chart_data_label data_label5_1 = {.value = "Amy"}; | ||
lxw_chart_data_label data_label5_2 = {.value = "Bea"}; | ||
lxw_chart_data_label data_label5_3 = {.value = "Eva"}; | ||
lxw_chart_data_label data_label5_4 = {.value = "Fay"}; | ||
lxw_chart_data_label data_label5_5 = {.value = "Liv"}; | ||
lxw_chart_data_label data_label5_6 = {.value = "Una"}; | ||
|
||
/* Create an array of label pointers. NULL indicates the end of the array. */ | ||
lxw_chart_data_label *data_labels5[] = { | ||
&data_label5_1, | ||
&data_label5_2, | ||
&data_label5_3, | ||
&data_label5_4, | ||
&data_label5_5, | ||
&data_label5_6, | ||
NULL | ||
}; | ||
|
||
/* Set the custom labels. */ | ||
chart_series_set_labels_custom(series, data_labels5); | ||
|
||
/* Turn off the legend. */ | ||
chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE); | ||
|
||
/* Insert the chart into the worksheet. */ | ||
worksheet_insert_chart_opt(worksheet, CELL("D66"), chart, &options); | ||
|
||
|
||
/* | ||
* Chart 6. Example with custom data labels from cells. | ||
*/ | ||
chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); | ||
|
||
/* Add a chart title. */ | ||
chart_title_set_name(chart, "Chart with custom data labels from cells"); | ||
|
||
/* Add a data series to the chart. */ | ||
series = chart_add_series(chart, "=Sheet1!$A$2:$A$7", | ||
"=Sheet1!$B$2:$B$7"); | ||
|
||
/* Add the series data labels. */ | ||
chart_series_set_labels(series); | ||
|
||
/* Create some custom labels. */ | ||
lxw_chart_data_label data_label6_1 = {.value = "=Sheet1!$C$2"}; | ||
lxw_chart_data_label data_label6_2 = {.value = "=Sheet1!$C$3"}; | ||
lxw_chart_data_label data_label6_3 = {.value = "=Sheet1!$C$4"}; | ||
lxw_chart_data_label data_label6_4 = {.value = "=Sheet1!$C$5"}; | ||
lxw_chart_data_label data_label6_5 = {.value = "=Sheet1!$C$6"}; | ||
lxw_chart_data_label data_label6_6 = {.value = "=Sheet1!$C$7"}; | ||
|
||
/* Create an array of label pointers. NULL indicates the end of the array. */ | ||
lxw_chart_data_label *data_labels6[] = { | ||
&data_label6_1, | ||
&data_label6_2, | ||
&data_label6_3, | ||
&data_label6_4, | ||
&data_label6_5, | ||
&data_label6_6, | ||
NULL | ||
}; | ||
|
||
/* Set the custom labels. */ | ||
chart_series_set_labels_custom(series, data_labels6); | ||
|
||
/* Turn off the legend. */ | ||
chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE); | ||
|
||
/* Insert the chart into the worksheet. */ | ||
worksheet_insert_chart_opt(worksheet, CELL("D82"), chart, &options); | ||
|
||
|
||
/* | ||
* Chart 7. Example with custom and default data labels. | ||
*/ | ||
chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); | ||
|
||
/* Add a chart title. */ | ||
chart_title_set_name(chart, "Mixed custom and default data labels"); | ||
|
||
/* Add a data series to the chart. */ | ||
series = chart_add_series(chart, "=Sheet1!$A$2:$A$7", | ||
"=Sheet1!$B$2:$B$7"); | ||
|
||
lxw_chart_font font2 = {.color = LXW_COLOR_RED}; | ||
|
||
/* Add the series data labels. */ | ||
chart_series_set_labels(series); | ||
|
||
/* Create some custom labels. */ | ||
|
||
/* The following is used to get a mix of default and custom labels. The | ||
* items initialized with '{0}' and items without a custom label (points 5 | ||
* and 6 which come after NULL) will get the default value. We also set a | ||
* font for the custom items as an extra example. | ||
*/ | ||
lxw_chart_data_label data_label7_1 = {.value = "=Sheet1!$C$2", .font = &font2}; | ||
lxw_chart_data_label data_label7_2 = {0}; | ||
lxw_chart_data_label data_label7_3 = {.value = "=Sheet1!$C$4", .font = &font2}; | ||
lxw_chart_data_label data_label7_4 = {.value = "=Sheet1!$C$5", .font = &font2}; | ||
|
||
/* Create an array of label pointers. NULL indicates the end of the array. */ | ||
lxw_chart_data_label *data_labels7[] = { | ||
&data_label7_1, | ||
&data_label7_2, | ||
&data_label7_3, | ||
&data_label7_4, | ||
NULL | ||
}; | ||
|
||
/* Set the custom labels. */ | ||
chart_series_set_labels_custom(series, data_labels7); | ||
|
||
/* Turn off the legend. */ | ||
chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE); | ||
|
||
/* Insert the chart into the worksheet. */ | ||
worksheet_insert_chart_opt(worksheet, CELL("D98"), chart, &options); | ||
|
||
|
||
/* | ||
* Chart 8. Example with deleted/hidden custom data labels. | ||
*/ | ||
chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); | ||
|
||
/* Add a chart title. */ | ||
chart_title_set_name(chart, "Chart with deleted data labels"); | ||
|
||
/* Add a data series to the chart. */ | ||
series = chart_add_series(chart, "=Sheet1!$A$2:$A$7", | ||
"=Sheet1!$B$2:$B$7"); | ||
|
||
/* Add the series data labels. */ | ||
chart_series_set_labels(series); | ||
|
||
/* Create some custom labels. */ | ||
lxw_chart_data_label hide = {.hide = LXW_TRUE}; | ||
lxw_chart_data_label keep = {.hide = LXW_FALSE}; | ||
|
||
/* An initialized struct like this would also work: */ | ||
/* lxw_chart_data_label keep = {0}; */ | ||
|
||
/* Create an array of label pointers. NULL indicates the end of the array. */ | ||
lxw_chart_data_label *data_labels8[] = { | ||
&hide, | ||
&keep, | ||
&hide, | ||
&hide, | ||
&keep, | ||
&hide, | ||
NULL | ||
}; | ||
|
||
/* Set the custom labels. */ | ||
chart_series_set_labels_custom(series, data_labels8); | ||
|
||
/* Turn off the legend. */ | ||
chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE); | ||
|
||
/* Insert the chart into the worksheet. */ | ||
worksheet_insert_chart_opt(worksheet, CELL("D114"), chart, &options); | ||
|
||
|
||
/* | ||
* Chart 9.Example with custom string data labels and formatting. | ||
*/ | ||
chart = workbook_add_chart(workbook, LXW_CHART_COLUMN); | ||
|
||
/* Add a chart title. */ | ||
chart_title_set_name(chart, "Chart with custom labels and formatting"); | ||
|
||
/* Add a data series to the chart. */ | ||
series = chart_add_series(chart, "=Sheet1!$A$2:$A$7", | ||
"=Sheet1!$B$2:$B$7"); | ||
|
||
/* Add the series data labels. */ | ||
chart_series_set_labels(series); | ||
|
||
/* Set the border/line and fill for the data labels. */ | ||
lxw_chart_line line2 = {.color = LXW_COLOR_RED}; | ||
lxw_chart_fill fill2 = {.color = LXW_COLOR_YELLOW}; | ||
lxw_chart_line line3 = {.color = LXW_COLOR_BLUE}; | ||
lxw_chart_fill fill3 = {.color = LXW_COLOR_GREEN}; | ||
|
||
/* Create some custom labels. */ | ||
lxw_chart_data_label data_label9_1 = {.value = "Amy", .line = &line3}; | ||
lxw_chart_data_label data_label9_2 = {.value = "Bea"}; | ||
lxw_chart_data_label data_label9_3 = {.value = "Eva"}; | ||
lxw_chart_data_label data_label9_4 = {.value = "Fay"}; | ||
lxw_chart_data_label data_label9_5 = {.value = "Liv"}; | ||
lxw_chart_data_label data_label9_6 = {.value = "Una", .fill = &fill3}; | ||
|
||
/* Set the default formatting for the data labels in the series. */ | ||
chart_series_set_labels_line(series, &line2); | ||
chart_series_set_labels_fill(series, &fill2); | ||
|
||
/* Create an array of label pointers. NULL indicates the end of the array. */ | ||
lxw_chart_data_label *data_labels9[] = { | ||
&data_label9_1, | ||
&data_label9_2, | ||
&data_label9_3, | ||
&data_label9_4, | ||
&data_label9_5, | ||
&data_label9_6, | ||
NULL | ||
}; | ||
|
||
/* Set the custom labels. */ | ||
chart_series_set_labels_custom(series, data_labels9); | ||
|
||
/* Turn off the legend. */ | ||
chart_legend_set_position(chart, LXW_CHART_LEGEND_NONE); | ||
|
||
/* Insert the chart into the worksheet. */ | ||
worksheet_insert_chart_opt(worksheet, CELL("D130"), chart, &options); | ||
|
||
return workbook_close(workbook); | ||
} |
Oops, something went wrong.