Add default hyperlink format as a style.

This commit is contained in:
John McNamara 2019-12-11 00:39:11 +00:00
parent 44bb2056e4
commit f26aeacb86
41 changed files with 286 additions and 47 deletions

View file

@ -15,36 +15,34 @@ int main() {
/* Add a worksheet. */
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
/* Add some cell formats for the hyperlinks. */
lxw_format *url_format = workbook_add_format(workbook);
lxw_format *red_format = workbook_add_format(workbook);
/* Get the default url format (used in the overwriting examples below). */
lxw_format *url_format = workbook_get_default_url_format(workbook);
/* Create the standard url link format. */
format_set_underline (url_format, LXW_UNDERLINE_SINGLE);
format_set_font_color(url_format, LXW_COLOR_BLUE);
/* Create another sample format. */
/* Create a user defined link format. */
lxw_format *red_format = workbook_add_format(workbook);
format_set_underline (red_format, LXW_UNDERLINE_SINGLE);
format_set_font_color(red_format, LXW_COLOR_RED);
/* Widen the first column to make the text clearer. */
worksheet_set_column(worksheet, 0, 0, 30, NULL);
/* Write a hyperlink. */
worksheet_write_url(worksheet, 0, 0, "http://libxlsxwriter.github.io", url_format);
/* Write a hyperlink. A default blue underline will be used if the format is NULL. */
worksheet_write_url(worksheet, 0, 0, "http://libxlsxwriter.github.io", NULL);
/* Write a hyperlink but overwrite the displayed string. */
worksheet_write_url (worksheet, 2, 0, "http://libxlsxwriter.github.io", url_format);
/* Write a hyperlink but overwrite the displayed string. Note, we need to
* specify the format for the string to match the default hyperlink. */
worksheet_write_url (worksheet, 2, 0, "http://libxlsxwriter.github.io", NULL);
worksheet_write_string(worksheet, 2, 0, "Read the documentation.", url_format);
/* Write a hyperlink with a different format. */
worksheet_write_url(worksheet, 4, 0, "http://libxlsxwriter.github.io", red_format);
/* Write a mail hyperlink. */
worksheet_write_url (worksheet, 6, 0, "mailto:jmcnamara@cpan.org", url_format);
worksheet_write_url (worksheet, 6, 0, "mailto:jmcnamara@cpan.org", NULL);
/* Write a mail hyperlink and overwrite the displayed string. */
worksheet_write_url (worksheet, 8, 0, "mailto:jmcnamara@cpan.org", url_format);
/* Write a mail hyperlink and overwrite the displayed string. We again
* specify the format for the string to match the default hyperlink. */
worksheet_write_url (worksheet, 8, 0, "mailto:jmcnamara@cpan.org", NULL);
worksheet_write_string(worksheet, 8, 0, "Drop me a line.", url_format);

View file

@ -783,6 +783,26 @@ lxw_error workbook_set_custom_property_datetime(lxw_workbook *workbook,
lxw_error workbook_define_name(lxw_workbook *workbook, const char *name,
const char *formula);
/**
* @brief Get the default URL format used with `worksheet_write_url()`.
*
* @param workbook Pointer to a lxw_workbook instance.
* @return A lxw_format instance that has hyperlink properties set.
*
* This function returns a lxw_format instance that is used for the default
* blue underline hyperlink in the `worksheet_write_url()` function when a
* format isn't specified:
*
* @code
* lxw_format *url_format = workbook_get_default_url_format(workbook);
* @endcode
*
* The format is the hyperlink style defined by Excel for the default theme.
* This format is only ever required when overwriting a string URL with
* data of a different type. See the example below.
*/
lxw_format *workbook_get_default_url_format(lxw_workbook *workbook);
/**
* @brief Get a worksheet object from its name.
*
@ -914,6 +934,7 @@ lxw_error workbook_set_vba_name(lxw_workbook *workbook, const char *name);
void lxw_workbook_free(lxw_workbook *workbook);
void lxw_workbook_assemble_xml_file(lxw_workbook *workbook);
void lxw_workbook_set_default_xf_indices(lxw_workbook *workbook);
void workbook_unset_default_url_format(lxw_workbook *workbook);
DEPRECATED(lxw_workbook *new_workbook(const char *filename),
"use 'workbook_new' instead");

View file

@ -881,6 +881,7 @@ typedef struct lxw_worksheet {
struct lxw_protection_obj protection;
lxw_drawing *drawing;
lxw_format *default_url_format;
STAILQ_ENTRY (lxw_worksheet) list_pointers;
@ -899,6 +900,7 @@ typedef struct lxw_worksheet_init_data {
char *name;
char *quoted_name;
char *tmpdir;
lxw_format *default_url_format;
} lxw_worksheet_init_data;
@ -1201,21 +1203,22 @@ lxw_error worksheet_write_datetime(lxw_worksheet *worksheet,
* worksheet cell specified by `row` and `column`.
*
* @code
* worksheet_write_url(worksheet, 0, 0, "http://libxlsxwriter.github.io", url_format);
* worksheet_write_url(worksheet, 0, 0, "http://libxlsxwriter.github.io", NULL);
* @endcode
*
* @image html hyperlinks_short.png
*
* The `format` parameter is used to apply formatting to the cell. This
* parameter can be `NULL` to indicate no formatting or it can be a @ref
* format.h "Format" object. The typical worksheet format for a hyperlink is a
* blue underline:
* parameter can be `NULL`, in which case the default Excel blue underlined
* hyperlink style will be used. If required a user defined @ref format.h
* "Format" object can be used:
* underline:
*
* @code
* lxw_format *url_format = workbook_add_format(workbook);
*
* format_set_underline (url_format, LXW_UNDERLINE_SINGLE);
* format_set_font_color(url_format, LXW_COLOR_BLUE);
* format_set_font_color(url_format, LXW_COLOR_RED);
*
* @endcode
*
@ -1223,10 +1226,10 @@ lxw_error worksheet_write_datetime(lxw_worksheet *worksheet,
* and `mailto:` :
*
* @code
* worksheet_write_url(worksheet, 0, 0, "ftp://www.python.org/", url_format);
* worksheet_write_url(worksheet, 1, 0, "http://www.python.org/", url_format);
* worksheet_write_url(worksheet, 2, 0, "https://www.python.org/", url_format);
* worksheet_write_url(worksheet, 3, 0, "mailto:jmcnamara@cpan.org", url_format);
* worksheet_write_url(worksheet, 0, 0, "ftp://www.python.org/", NULL);
* worksheet_write_url(worksheet, 1, 0, "http://www.python.org/", NULL);
* worksheet_write_url(worksheet, 2, 0, "https://www.python.org/", NULL);
* worksheet_write_url(worksheet, 3, 0, "mailto:jmcnamara@cpan.org", NULL);
*
* @endcode
*
@ -1235,13 +1238,18 @@ lxw_error worksheet_write_datetime(lxw_worksheet *worksheet,
* link. However, it is possible to overwrite it with any other
* `libxlsxwriter` type using the appropriate `worksheet_write_*()`
* function. The most common case is to overwrite the displayed link text with
* another string:
* another string. To do this we must also match the default URL format using
* `workbook_get_default_url_format()`:
*
* @code
* // Write a hyperlink but overwrite the displayed string.
* worksheet_write_url (worksheet, 2, 0, "http://libxlsxwriter.github.io", url_format);
* worksheet_write_string(worksheet, 2, 0, "Read the documentation.", url_format);
* // Write a hyperlink with the default blue underline format.
* worksheet_write_url(worksheet, 2, 0, "http://libxlsxwriter.github.io", NULL);
*
* // Get the default url format.
* lxw_format *url_format = workbook_get_default_url_format(workbook);
*
* // Overwrite the hyperlink with a user defined string and default format.
* worksheet_write_string(worksheet, 2, 0, "Read the documentation.", url_format);
* @endcode
*
* @image html hyperlinks_short2.png
@ -1251,15 +1259,15 @@ lxw_error worksheet_write_datetime(lxw_worksheet *worksheet,
* worksheet references:
*
* @code
* worksheet_write_url(worksheet, 0, 0, "internal:Sheet2!A1", url_format);
* worksheet_write_url(worksheet, 1, 0, "internal:Sheet2!B2", url_format);
* worksheet_write_url(worksheet, 2, 0, "internal:Sheet2!A1:B2", url_format);
* worksheet_write_url(worksheet, 3, 0, "internal:'Sales Data'!A1", url_format);
* worksheet_write_url(worksheet, 4, 0, "external:c:\\temp\\foo.xlsx", url_format);
* worksheet_write_url(worksheet, 5, 0, "external:c:\\foo.xlsx#Sheet2!A1", url_format);
* worksheet_write_url(worksheet, 6, 0, "external:..\\foo.xlsx", url_format);
* worksheet_write_url(worksheet, 7, 0, "external:..\\foo.xlsx#Sheet2!A1", url_format);
* worksheet_write_url(worksheet, 8, 0, "external:\\\\NET\\share\\foo.xlsx", url_format);
* worksheet_write_url(worksheet, 0, 0, "internal:Sheet2!A1", NULL);
* worksheet_write_url(worksheet, 1, 0, "internal:Sheet2!B2", NULL);
* worksheet_write_url(worksheet, 2, 0, "internal:Sheet2!A1:B2", NULL);
* worksheet_write_url(worksheet, 3, 0, "internal:'Sales Data'!A1", NULL);
* worksheet_write_url(worksheet, 4, 0, "external:c:\\temp\\foo.xlsx", NULL);
* worksheet_write_url(worksheet, 5, 0, "external:c:\\foo.xlsx#Sheet2!A1", NULL);
* worksheet_write_url(worksheet, 6, 0, "external:..\\foo.xlsx", NULL);
* worksheet_write_url(worksheet, 7, 0, "external:..\\foo.xlsx#Sheet2!A1", NULL);
* worksheet_write_url(worksheet, 8, 0, "external:\\\\NET\\share\\foo.xlsx", NULL);
*
* @endcode
*
@ -1271,7 +1279,7 @@ lxw_error worksheet_write_datetime(lxw_worksheet *worksheet,
* `#` character:
*
* @code
* worksheet_write_url(worksheet, 0, 0, "external:c:\\foo.xlsx#Sheet2!A1", url_format);
* worksheet_write_url(worksheet, 0, 0, "external:c:\\foo.xlsx#Sheet2!A1", NULL);
* @endcode
*
* You can also link to a named range in the target worksheet: For example say
@ -1279,7 +1287,7 @@ lxw_error worksheet_write_datetime(lxw_worksheet *worksheet,
* you could link to it as follows:
*
* @code
* worksheet_write_url(worksheet, 0, 0, "external:c:\\temp\\foo.xlsx#my_name", url_format);
* worksheet_write_url(worksheet, 0, 0, "external:c:\\temp\\foo.xlsx#my_name", NULL);
*
* @endcode
*
@ -1287,14 +1295,14 @@ lxw_error worksheet_write_datetime(lxw_worksheet *worksheet,
* characters are single quoted as follows:
*
* @code
* worksheet_write_url(worksheet, 0, 0, "internal:'Sales Data'!A1", url_format);
* worksheet_write_url(worksheet, 0, 0, "internal:'Sales Data'!A1", NULL);
* @endcode
*
* Links to network files are also supported. Network files normally begin
* with two back slashes as follows `\\NETWORK\etc`. In order to represent
* this in a C string literal the backslashes should be escaped:
* @code
* worksheet_write_url(worksheet, 0, 0, "external:\\\\NET\\share\\foo.xlsx", url_format);
* worksheet_write_url(worksheet, 0, 0, "external:\\\\NET\\share\\foo.xlsx", NULL);
* @endcode
*
*
@ -1302,8 +1310,8 @@ lxw_error worksheet_write_datetime(lxw_worksheet *worksheet,
* translated internally to backslashes:
*
* @code
* worksheet_write_url(worksheet, 0, 0, "external:c:/temp/foo.xlsx", url_format);
* worksheet_write_url(worksheet, 1, 0, "external://NET/share/foo.xlsx", url_format);
* worksheet_write_url(worksheet, 0, 0, "external:c:/temp/foo.xlsx", NULL);
* worksheet_write_url(worksheet, 1, 0, "external://NET/share/foo.xlsx", NULL);
*
* @endcode
*

View file

@ -1513,7 +1513,7 @@ workbook_add_worksheet(lxw_workbook *self, const char *sheetname)
lxw_worksheet *worksheet = NULL;
lxw_worksheet_name *worksheet_name = NULL;
lxw_error error;
lxw_worksheet_init_data init_data = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
lxw_worksheet_init_data init_data = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
char *new_name = NULL;
if (sheetname) {
@ -1552,6 +1552,7 @@ workbook_add_worksheet(lxw_workbook *self, const char *sheetname)
init_data.active_sheet = &self->active_sheet;
init_data.first_sheet = &self->first_sheet;
init_data.tmpdir = self->options.tmpdir;
init_data.default_url_format = self->default_url_format;
/* Create a new worksheet object. */
worksheet = lxw_worksheet_new(&init_data);
@ -1595,7 +1596,7 @@ workbook_add_chartsheet(lxw_workbook *self, const char *sheetname)
lxw_chartsheet *chartsheet = NULL;
lxw_chartsheet_name *chartsheet_name = NULL;
lxw_error error;
lxw_worksheet_init_data init_data = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
lxw_worksheet_init_data init_data = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
char *new_name = NULL;
if (sheetname) {
@ -2164,6 +2165,29 @@ workbook_get_chartsheet_by_name(lxw_workbook *self, const char *name)
return NULL;
}
/*
* Get the default URL format.
*/
lxw_format *
workbook_get_default_url_format(lxw_workbook *self)
{
return self->default_url_format;
}
/*
* Get the default URL format.
*/
void
workbook_unset_default_url_format(lxw_workbook *self)
{
self->default_url_format->hyperlink = LXW_FALSE;
self->default_url_format->xf_id = 0;
self->default_url_format->underline = LXW_UNDERLINE_NONE;
self->default_url_format->theme = 0;
}
lxw_format *default_url_format;
/*
* Validate the worksheet name based on Excel's rules.
*/

View file

@ -205,6 +205,7 @@ lxw_worksheet_new(lxw_worksheet_init_data *init_data)
worksheet->optimize = init_data->optimize;
worksheet->active_sheet = init_data->active_sheet;
worksheet->first_sheet = init_data->first_sheet;
worksheet->default_url_format = init_data->default_url_format;
}
return worksheet;
@ -4172,7 +4173,7 @@ lxw_error
worksheet_write_url_opt(lxw_worksheet *self,
lxw_row_t row_num,
lxw_col_t col_num, const char *url,
lxw_format *format, const char *string,
lxw_format *user_format, const char *string,
const char *tooltip)
{
lxw_cell *link;
@ -4183,6 +4184,7 @@ worksheet_write_url_opt(lxw_worksheet *self,
char *tooltip_copy = NULL;
char *found_string;
char *tmp_string = NULL;
lxw_format *format = NULL;
lxw_error err;
size_t string_size;
size_t i;
@ -4314,6 +4316,12 @@ worksheet_write_url_opt(lxw_worksheet *self,
if (lxw_utf8_strlen(url_copy) > 255)
goto mem_error;
/* Use the default URL format if none is specified. */
if (!user_format)
format = self->default_url_format;
else
format = user_format;
err = worksheet_write_string(self, row_num, col_num, string_copy, format);
if (err)
goto mem_error;

View file

@ -15,6 +15,8 @@ int main() {
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
lxw_chart *chart = workbook_add_chart(workbook, LXW_CHART_BAR);
workbook_unset_default_url_format(workbook);
/* For testing, copy the randomly generated axis ids in the target file. */
chart->axis_id_1 = 40522880;
chart->axis_id_2 = 40524416;

View file

@ -17,6 +17,8 @@ int main() {
lxw_chart *chart2 = workbook_add_chart(workbook, LXW_CHART_BAR);
lxw_chart *chart3 = workbook_add_chart(workbook, LXW_CHART_BAR);
workbook_unset_default_url_format(workbook);
/* For testing, copy the randomly generated axis ids in the target file. */
chart1->axis_id_1 = 40274944;
chart1->axis_id_2 = 40294272;

View file

@ -20,6 +20,8 @@ int main() {
lxw_chart *chart2 = workbook_add_chart(workbook, LXW_CHART_BAR);
lxw_chart *chart3 = workbook_add_chart(workbook, LXW_CHART_COLUMN);
workbook_unset_default_url_format(workbook);
/* For testing, copy the randomly generated axis ids in the target file. */
chart1->axis_id_1 = 40294272;
chart1->axis_id_2 = 40295808;

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_escapes04.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "http://www.perl.com/?a=1&b=2" , NULL);
return workbook_close(workbook);

View file

@ -15,6 +15,8 @@ int main() {
lxw_worksheet *worksheet1 = workbook_add_worksheet(workbook, "Start");
lxw_worksheet *worksheet2 = workbook_add_worksheet(workbook, "A & B");
workbook_unset_default_url_format(workbook);
(void)worksheet2;
worksheet_write_url_opt(worksheet1, CELL("A1"), "internal:'A & B'!A1", NULL, "Jump to A & B" , NULL);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_escapes07.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "http://example.com/!\"$%&'( )*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", NULL);
return workbook_close(workbook);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_escapes08.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
/* Test an already escaped string. */
worksheet_write_url_opt(worksheet, CELL("A1"), "http://example.com/%5b0%5d", NULL, "http://example.com/[0]", NULL);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink01.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "http://www.perl.org/" , NULL);
return workbook_close(workbook);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink02.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "http://www.perl.org/", NULL);
worksheet_write_url(worksheet, CELL("D4"), "http://www.perl.org/", NULL);
worksheet_write_url(worksheet, CELL("A8"), "http://www.perl.org/", NULL);

View file

@ -15,6 +15,8 @@ int main() {
lxw_worksheet *worksheet1 = workbook_add_worksheet(workbook, NULL);
lxw_worksheet *worksheet2 = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet1, CELL("A1"), "http://www.perl.org/", NULL);
worksheet_write_url(worksheet1, CELL("D4"), "http://www.perl.org/", NULL);
worksheet_write_url(worksheet1, CELL("A8"), "http://www.perl.org/", NULL);

View file

@ -16,6 +16,8 @@ int main() {
lxw_worksheet *worksheet2 = workbook_add_worksheet(workbook, NULL);
lxw_worksheet *worksheet3 = workbook_add_worksheet(workbook, "Data Sheet");
workbook_unset_default_url_format(workbook);
(void)worksheet2;
(void)worksheet3;

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink05.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url( worksheet, CELL("A1"), "http://www.perl.org/", NULL);
worksheet_write_url_opt(worksheet, CELL("A3"), "http://www.perl.org/", NULL, "Perl home", NULL);
worksheet_write_url_opt(worksheet, CELL("A5"), "http://www.perl.org/", NULL, "Perl home", "Tool Tip");

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink06.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url_opt(worksheet, CELL("A1"), "external:C:\\Temp\\foo.xlsx", NULL, NULL, NULL);
worksheet_write_url_opt(worksheet, CELL("A3"), "external:C:\\Temp\\foo.xlsx#Sheet1!A1", NULL, NULL, NULL);
worksheet_write_url_opt(worksheet, CELL("A5"), "external:C:\\Temp\\foo.xlsx#Sheet1!A1", NULL, "External", "Tip");

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink07.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url_opt(worksheet, CELL("A1"), "external:\\\\VBOXSVR\\share\\foo.xlsx", NULL, "J:\\foo.xlsx", NULL);
worksheet_write_url( worksheet, CELL("A3"), "external:foo.xlsx" , NULL);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink08.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
/* Test with forward slashes instead of back slashes in test_hyperlink07.c. */
worksheet_write_url_opt(worksheet, CELL("A1"), "external://VBOXSVR/share/foo.xlsx", NULL, "J:/foo.xlsx", NULL);
worksheet_write_url( worksheet, CELL("A3"), "external:foo.xlsx" , NULL);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink09.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "external:..\\foo.xlsx" , NULL);
worksheet_write_url(worksheet, CELL("A3"), "external:..\\foo.xlsx#Sheet1!A1" , NULL);
worksheet_write_url_opt(worksheet, CELL("A5"), "external:\\\\VBOXSVR\\share\\foo.xlsx#Sheet1!B2", NULL, "J:\\foo.xlsx#Sheet1!B2", NULL);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink15.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("B2"), "external:subdir/blank.xlsx", NULL);
return workbook_close(workbook);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink16.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("B2"), "external:./subdir/blank.xlsx", NULL);
return workbook_close(workbook);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink17.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
/* URL with whitespace. */
worksheet_write_url(worksheet, CELL("A1"), "http://google.com/some link", NULL);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink18.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "http://google.com/00000000001111111111222222222233333333334444444444555555555566666666666777777777778888888888999999999990000000000111111111122222222223333333333444444444455555555556666666666677777777777888888888899999999999000000000011111111112222222222x", NULL);
/* This longer url should be ignored. */

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink21.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "external:C:\\Temp\\Test 1" , NULL);
return workbook_close(workbook);

View file

@ -14,6 +14,7 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink22.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "external:\\\\Vboxsvr\\share\\foo bar.xlsx", NULL);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink23.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url_opt(worksheet, CELL("A1"), "https://en.wikipedia.org/wiki/Microsoft_Excel#Data_storage_and_communication", NULL, "Display text", NULL);
return workbook_close(workbook);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink24.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "http://www.example.com/some_long_url_that_is_255_characters_long_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_z#some_long_location_that_is_255_characters_long_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_abcdefgh_z", NULL);
return workbook_close(workbook);

View file

@ -14,6 +14,7 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink25.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "http://www.google.com/#foo#bar", NULL);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink26.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "http://www.google.com/foo#bar#baz", NULL);
return workbook_close(workbook);

View file

@ -14,6 +14,8 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink27.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
workbook_unset_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "external:\\\\Vboxsvr\\share\\foo bar.xlsx#'Some Sheet'!A1", NULL);
return workbook_close(workbook);

View file

@ -14,7 +14,7 @@ int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink28.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
worksheet_write_url(worksheet, CELL("A1"), "http://www.perl.org/", workbook->default_url_format);
worksheet_write_url(worksheet, CELL("A1"), "http://www.perl.org/", NULL);
return workbook_close(workbook);
}

View file

@ -0,0 +1,28 @@
/*****************************************************************************
* Test cases for libxlsxwriter.
*
* Test to compare output against Excel files.
*
* Copyright 2014-2019, John McNamara, jmcnamara@cpan.org
*
*/
#include "xlsxwriter.h"
int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink29.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
lxw_format *format1 = workbook_add_format(workbook);
lxw_format *format2 = workbook_add_format(workbook);
format_set_hyperlink(format1);
format_set_underline(format2, LXW_UNDERLINE_SINGLE);
format_set_font_color(format2, LXW_COLOR_RED);
worksheet_write_url(worksheet, CELL("A1"), "http://www.perl.org/", format1);
worksheet_write_url(worksheet, CELL("A2"), "http://www.perl.com/", format2);
return workbook_close(workbook);
}

View file

@ -0,0 +1,36 @@
/*****************************************************************************
* Test cases for libxlsxwriter.
*
* Test to compare output against Excel files.
*
* Copyright 2014-2019, John McNamara, jmcnamara@cpan.org
*
*/
#include "xlsxwriter.h"
int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink30.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
lxw_format *format1 = workbook_add_format(workbook);
lxw_format *format2 = workbook_add_format(workbook);
lxw_format *format3 = workbook_add_format(workbook);
workbook_unset_default_url_format(workbook);
format_set_hyperlink(format1);
format_set_underline(format2, LXW_UNDERLINE_SINGLE);
format_set_font_color(format2, LXW_COLOR_RED);
format_set_font_color(format3, LXW_COLOR_BLUE);
format_set_underline(format3, LXW_UNDERLINE_SINGLE);
worksheet_write_url(worksheet, CELL("A1"), "http://www.python.org/1", format1);
worksheet_write_url(worksheet, CELL("A2"), "http://www.python.org/2", format2);
worksheet_write_url(worksheet, CELL("A3"), "http://www.python.org/3", format3);
return workbook_close(workbook);
}

View file

@ -0,0 +1,24 @@
/*****************************************************************************
* Test cases for libxlsxwriter.
*
* Test to compare output against Excel files.
*
* Copyright 2014-2019, John McNamara, jmcnamara@cpan.org
*
*/
#include "xlsxwriter.h"
int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink31.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
lxw_format *format1 = workbook_add_format(workbook);
format_set_bold(format1);
worksheet_write_string(worksheet, CELL("A1"), "Test", format1);
worksheet_write_url(worksheet, CELL("A3"), "http://www.python.org/" , NULL);
return workbook_close(workbook);
}

View file

@ -0,0 +1,22 @@
/*****************************************************************************
* Test cases for libxlsxwriter.
*
* Test to compare output against Excel files.
*
* Copyright 2014-2019, John McNamara, jmcnamara@cpan.org
*
*/
#include "xlsxwriter.h"
int main() {
lxw_workbook *workbook = workbook_new("test_hyperlink78.xlsx");
lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);
lxw_format *default_url_format = workbook_get_default_url_format(workbook);
worksheet_write_url(worksheet, CELL("A1"), "http://www.perl.org/", default_url_format);
return workbook_close(workbook);
}

View file

@ -109,3 +109,21 @@ class TestCompareXLSXFiles(base_test_class.XLSXBaseTest):
def test_hyperlink28(self):
self.run_exe_test('test_hyperlink28')
def test_hyperlink29(self):
self.run_exe_test('test_hyperlink29')
def test_hyperlink30(self):
# Ignore custom colors in styles.xml file.
self.ignore_elements = {'xl/styles.xml': ['<color',
'<mruColors>',
'</mruColors>',
'</colors>']}
self.run_exe_test('test_hyperlink30')
def test_hyperlink31(self):
self.run_exe_test('test_hyperlink31')
# Copy of hyperlink28 with explicit formatting.
def test_hyperlink78(self):
self.run_exe_test('test_hyperlink78', 'hyperlink28.xlsx')

Binary file not shown.

Binary file not shown.

Binary file not shown.