Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature request: worksheet_write_rich_string() #37

Closed
jmcnamara opened this issue Dec 10, 2015 · 6 comments
Closed

Feature request: worksheet_write_rich_string() #37

jmcnamara opened this issue Dec 10, 2015 · 6 comments

Comments

@jmcnamara
Copy link
Owner

jmcnamara commented Dec 10, 2015

Add worksheet_write_rich_string() function like the Python XlsxWriter Worksheet method write_rich_string().
See https://xlsxwriter.readthedocs.io/example_rich_strings.html

  • Difficulty: 5 (Easy 1 - 5 Hard)
  • Priority: 2 (High 1 - 5 Low)

Add +1 as a comment to vote for this feature and to get an update when it is implemented.

If you would like to make a donation to accelerate this feature you can do so via PayPal or contact me directly. Currently $0 of $500.

@ghost
Copy link

ghost commented Jul 18, 2018

+1

1 similar comment
@guyverthree
Copy link

+1

@jmcnamara
Copy link
Owner Author

jmcnamara commented Aug 6, 2018

Since I've had a few requests about this I've added a note about making donations to prioritize this feature.

jmcnamara added a commit that referenced this issue Sep 27, 2018
jmcnamara added a commit that referenced this issue Sep 27, 2018
jmcnamara added a commit that referenced this issue Sep 28, 2018
jmcnamara added a commit that referenced this issue Sep 29, 2018
jmcnamara added a commit that referenced this issue Sep 29, 2018
@jmcnamara
Copy link
Owner Author

jmcnamara commented Sep 29, 2018

There is now working code for this feature on the rich_strings branch.

It still needs parameter validation and documentation before it is merged up to master but the core API and functionality is complete. Here is an example from the branch:

/*
 * An example of using the libxlsxwriter library to write some "rich strings",
 * i.e., strings with multiple formats.
 *
 * Copyright 2014-2018, John McNamara, jmcnamara@cpan.org
 *
 */

#include "xlsxwriter.h"

int main() {

    lxw_workbook  *workbook  = workbook_new("rich_strings.xlsx");
    lxw_worksheet *worksheet = workbook_add_worksheet(workbook, NULL);

    /* Set up some formats to use. */
    lxw_format *bold = workbook_add_format(workbook);
    format_set_bold(bold);

    lxw_format *italic = workbook_add_format(workbook);
    format_set_italic(italic);

    lxw_format *red = workbook_add_format(workbook);
    format_set_font_color(red, LXW_COLOR_RED);

    lxw_format *blue = workbook_add_format(workbook);
    format_set_font_color(blue, LXW_COLOR_BLUE);

    lxw_format *center = workbook_add_format(workbook);
    format_set_align(center, LXW_ALIGN_CENTER);

    lxw_format *superscript = workbook_add_format(workbook);
    format_set_font_script(superscript, LXW_FONT_SUPERSCRIPT);

    /* Make the first column wide for clarity. */
    worksheet_set_column(worksheet, 0, 0, 30, NULL);


    /* Create and write some rich strings with multiple formats. */

    /* Example 1. Some bold and italic in the same string. */
    lxw_rich_string_tuple fragment11 = {.format = NULL,   .string = "This is "};
    lxw_rich_string_tuple fragment12 = {.format = bold,   .string = "bold"};
    lxw_rich_string_tuple fragment13 = {.format = NULL,   .string = " and this is "};
    lxw_rich_string_tuple fragment14 = {.format = italic, .string = "italic"};
    lxw_rich_string_tuple *rich_string1[] = {&fragment11, &fragment12,
                                             &fragment13, &fragment14, NULL};

    worksheet_write_rich_string(worksheet, CELL("A1"), rich_string1, NULL);


    /* Example 2. Some red and blue coloring in the same string. */
    lxw_rich_string_tuple fragment21 = {.format = NULL,   .string = "This is "};
    lxw_rich_string_tuple fragment22 = {.format = red,    .string = "red"};
    lxw_rich_string_tuple fragment23 = {.format = NULL,   .string = " and this is "};
    lxw_rich_string_tuple fragment24 = {.format = blue,   .string = "blue"};
    lxw_rich_string_tuple *rich_string2[] = {&fragment21, &fragment22,
                                             &fragment23, &fragment24, NULL};

    worksheet_write_rich_string(worksheet, CELL("A3"), rich_string2, NULL);


    /* Example 3. A rich string plus cell formatting. */
    lxw_rich_string_tuple fragment31 = {.format = NULL,   .string = "Some "};
    lxw_rich_string_tuple fragment32 = {.format = bold,   .string = "bold text"};
    lxw_rich_string_tuple fragment33 = {.format = NULL,   .string = " centered"};
    lxw_rich_string_tuple *rich_string3[] = {&fragment31, &fragment32,
                                             &fragment33, NULL};

    /* Note that is example also can a "center" cell format. */
    worksheet_write_rich_string(worksheet, CELL("A5"), rich_string3, center);


    /* Example 4. A math example with a superscript. */
    lxw_rich_string_tuple fragment41 = {.format = italic,      .string = "j =k"};
    lxw_rich_string_tuple fragment42 = {.format = superscript, .string = "(n-1)"};
    lxw_rich_string_tuple *rich_string4[] = {&fragment41, &fragment42, NULL};

    worksheet_write_rich_string(worksheet, CELL("A7"), rich_string4, center);


    workbook_close(workbook);

    return 0;
}

And the output:

screenshot

The key idea is to split the string into to fragments that are preceded by the format. If the format is NULL then default formatting is applied.

The API is a little clunky, i.e., having to create a lxw_rich_string_tuple ** with the fragments) but that is suitable for wrapping in small user defined functions suitable to the data.

If you want to try it in advance let me know how you get on. All the tests are ported and passing.

jmcnamara added a commit that referenced this issue Sep 29, 2018
jmcnamara added a commit that referenced this issue Sep 29, 2018
jmcnamara added a commit that referenced this issue Sep 30, 2018
@jmcnamara
Copy link
Owner Author

@jmcnamara
Copy link
Owner Author

Added in version 0.8.3: https://libxlsxwriter.github.io/changes.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants