Xlsxwriter, formatting just some cells, not whole row or whole column?










1















I have a dataframe that I am sending to Excel using the xlsxwriter engine, then applying formatting to a sheet before closing it. How can I only set a bg color for the columns that have data in them?



For example, I am able to add a yellow background color to the second column (below), but it extends past the cells that have data in them. I am doing this with set_column() as below:



worksheet.set_column(1, 1, 18, hilite_format)


I don't see an option to set column format for only certain rows, or to use set_row() to only format certain columns. I've already written the data to the worksheet, so I can't use worksheet.write() or it will overwrite the data that is already in there. At least I don't see any way to use .write() to just apply the formatting without writing data or None into the cells.



Is there a way to just 'paint' some formatting over a range of cells without affecting the values in those cells? I would prefer not to have to use conditional formatting or to re-write the data for these cells just to be able to get the formatting right.



Thank!



enter image description here










share|improve this question






















  • There is not way at the time of writing to change a format of an already "written" cell using Xlsxwriter. It's a feature-request, but it's not a priority. I think the only feasible thing to do for you is to use conditional formatting, just as @LuanNaufal already has given you the code for.

    – Hampus Larsson
    Nov 13 '18 at 19:38
















1















I have a dataframe that I am sending to Excel using the xlsxwriter engine, then applying formatting to a sheet before closing it. How can I only set a bg color for the columns that have data in them?



For example, I am able to add a yellow background color to the second column (below), but it extends past the cells that have data in them. I am doing this with set_column() as below:



worksheet.set_column(1, 1, 18, hilite_format)


I don't see an option to set column format for only certain rows, or to use set_row() to only format certain columns. I've already written the data to the worksheet, so I can't use worksheet.write() or it will overwrite the data that is already in there. At least I don't see any way to use .write() to just apply the formatting without writing data or None into the cells.



Is there a way to just 'paint' some formatting over a range of cells without affecting the values in those cells? I would prefer not to have to use conditional formatting or to re-write the data for these cells just to be able to get the formatting right.



Thank!



enter image description here










share|improve this question






















  • There is not way at the time of writing to change a format of an already "written" cell using Xlsxwriter. It's a feature-request, but it's not a priority. I think the only feasible thing to do for you is to use conditional formatting, just as @LuanNaufal already has given you the code for.

    – Hampus Larsson
    Nov 13 '18 at 19:38














1












1








1








I have a dataframe that I am sending to Excel using the xlsxwriter engine, then applying formatting to a sheet before closing it. How can I only set a bg color for the columns that have data in them?



For example, I am able to add a yellow background color to the second column (below), but it extends past the cells that have data in them. I am doing this with set_column() as below:



worksheet.set_column(1, 1, 18, hilite_format)


I don't see an option to set column format for only certain rows, or to use set_row() to only format certain columns. I've already written the data to the worksheet, so I can't use worksheet.write() or it will overwrite the data that is already in there. At least I don't see any way to use .write() to just apply the formatting without writing data or None into the cells.



Is there a way to just 'paint' some formatting over a range of cells without affecting the values in those cells? I would prefer not to have to use conditional formatting or to re-write the data for these cells just to be able to get the formatting right.



Thank!



enter image description here










share|improve this question














I have a dataframe that I am sending to Excel using the xlsxwriter engine, then applying formatting to a sheet before closing it. How can I only set a bg color for the columns that have data in them?



For example, I am able to add a yellow background color to the second column (below), but it extends past the cells that have data in them. I am doing this with set_column() as below:



worksheet.set_column(1, 1, 18, hilite_format)


I don't see an option to set column format for only certain rows, or to use set_row() to only format certain columns. I've already written the data to the worksheet, so I can't use worksheet.write() or it will overwrite the data that is already in there. At least I don't see any way to use .write() to just apply the formatting without writing data or None into the cells.



Is there a way to just 'paint' some formatting over a range of cells without affecting the values in those cells? I would prefer not to have to use conditional formatting or to re-write the data for these cells just to be able to get the formatting right.



Thank!



enter image description here







python formatting xlsxwriter






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 13 '18 at 19:06









KorzakKorzak

103210




103210












  • There is not way at the time of writing to change a format of an already "written" cell using Xlsxwriter. It's a feature-request, but it's not a priority. I think the only feasible thing to do for you is to use conditional formatting, just as @LuanNaufal already has given you the code for.

    – Hampus Larsson
    Nov 13 '18 at 19:38


















  • There is not way at the time of writing to change a format of an already "written" cell using Xlsxwriter. It's a feature-request, but it's not a priority. I think the only feasible thing to do for you is to use conditional formatting, just as @LuanNaufal already has given you the code for.

    – Hampus Larsson
    Nov 13 '18 at 19:38

















There is not way at the time of writing to change a format of an already "written" cell using Xlsxwriter. It's a feature-request, but it's not a priority. I think the only feasible thing to do for you is to use conditional formatting, just as @LuanNaufal already has given you the code for.

– Hampus Larsson
Nov 13 '18 at 19:38






There is not way at the time of writing to change a format of an already "written" cell using Xlsxwriter. It's a feature-request, but it's not a priority. I think the only feasible thing to do for you is to use conditional formatting, just as @LuanNaufal already has given you the code for.

– Hampus Larsson
Nov 13 '18 at 19:38













2 Answers
2






active

oldest

votes


















1














Try using the conditional_format(), highlighting the cells that are not blank:



worksheet.conditional_format('B:B', 'type': 'no_blanks',
'format': hilite_format)





share|improve this answer






























    0














    Try this code :




    • You put your logic here and use whenever you want in cell.




      merge_format = workbook.add_format(
      'border': 1,
      'align': 'center',
      'valign': 'vcenter')



      worksheet.merge_range('A1:R1', 'AGENCIES', merge_format)







    share|improve this answer






















      Your Answer






      StackExchange.ifUsing("editor", function ()
      StackExchange.using("externalEditor", function ()
      StackExchange.using("snippets", function ()
      StackExchange.snippets.init();
      );
      );
      , "code-snippets");

      StackExchange.ready(function()
      var channelOptions =
      tags: "".split(" "),
      id: "1"
      ;
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function()
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled)
      StackExchange.using("snippets", function()
      createEditor();
      );

      else
      createEditor();

      );

      function createEditor()
      StackExchange.prepareEditor(
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader:
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      ,
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      );



      );













      draft saved

      draft discarded


















      StackExchange.ready(
      function ()
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53287909%2fxlsxwriter-formatting-just-some-cells-not-whole-row-or-whole-column%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      1














      Try using the conditional_format(), highlighting the cells that are not blank:



      worksheet.conditional_format('B:B', 'type': 'no_blanks',
      'format': hilite_format)





      share|improve this answer



























        1














        Try using the conditional_format(), highlighting the cells that are not blank:



        worksheet.conditional_format('B:B', 'type': 'no_blanks',
        'format': hilite_format)





        share|improve this answer

























          1












          1








          1







          Try using the conditional_format(), highlighting the cells that are not blank:



          worksheet.conditional_format('B:B', 'type': 'no_blanks',
          'format': hilite_format)





          share|improve this answer













          Try using the conditional_format(), highlighting the cells that are not blank:



          worksheet.conditional_format('B:B', 'type': 'no_blanks',
          'format': hilite_format)






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 13 '18 at 19:29









          Luan NaufalLuan Naufal

          4908




          4908























              0














              Try this code :




              • You put your logic here and use whenever you want in cell.




                merge_format = workbook.add_format(
                'border': 1,
                'align': 'center',
                'valign': 'vcenter')



                worksheet.merge_range('A1:R1', 'AGENCIES', merge_format)







              share|improve this answer



























                0














                Try this code :




                • You put your logic here and use whenever you want in cell.




                  merge_format = workbook.add_format(
                  'border': 1,
                  'align': 'center',
                  'valign': 'vcenter')



                  worksheet.merge_range('A1:R1', 'AGENCIES', merge_format)







                share|improve this answer

























                  0












                  0








                  0







                  Try this code :




                  • You put your logic here and use whenever you want in cell.




                    merge_format = workbook.add_format(
                    'border': 1,
                    'align': 'center',
                    'valign': 'vcenter')



                    worksheet.merge_range('A1:R1', 'AGENCIES', merge_format)







                  share|improve this answer













                  Try this code :




                  • You put your logic here and use whenever you want in cell.




                    merge_format = workbook.add_format(
                    'border': 1,
                    'align': 'center',
                    'valign': 'vcenter')



                    worksheet.merge_range('A1:R1', 'AGENCIES', merge_format)








                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 16 '18 at 13:08









                  Bhoomi VaishnaniBhoomi Vaishnani

                  516218




                  516218



























                      draft saved

                      draft discarded
















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid


                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.

                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53287909%2fxlsxwriter-formatting-just-some-cells-not-whole-row-or-whole-column%23new-answer', 'question_page');

                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown