Pandas to Excel -将部分文本加粗

myzjeezk  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(303)

有没有办法在Pandas中将字符串/单元格的一部分加粗?我正在处理大量的文本数据,导出到Excel,然后在Word中将其用作链接内容,因此导出后我无法格式化它,因为数据经常更改。
简化示例:

import pandas as pd

df = pd.DataFrame([["Hello world."], ["Hello bold world."]], columns = ["example"])

writer = pd.ExcelWriter('sample.xlsx', engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sample', index=False)
writer.save()

我想把"bold"用粗体表示。有没有什么方法可以只突出显示字符串的一部分?
我已经用**bold**<b>bold</b>'\033[1mbold\033[0m'进行了测试,但完全没有成功。
多谢了

plupiseo

plupiseo1#

多亏了@NoobVB,我被指引了正确的方向:write_rich_string。找到了这个great article,它把它描述成一本食谱,并把它变成了一个工作解决方案:

import pandas as pd
from pandas.io.excel._xlsxwriter import XlsxWriter

class RichExcelWriter(XlsxWriter):
    def __init__(self, *args, **kwargs):
        super(RichExcelWriter, self).__init__(*args, **kwargs)

    def _value_with_fmt(self, val):
        if type(val) == list:
            return val, None
        return super(RichExcelWriter, self)._value_with_fmt(val)

    def _write_cells(self, cells, sheet_name=None, startrow=0, startcol=0, freeze_panes=None):
        sheet_name = self._get_sheet_name(sheet_name)
        if sheet_name in self.sheets:
            wks = self.sheets[sheet_name]
        else:
            wks = self.book.add_worksheet(sheet_name)
            #add handler to the worksheet when it's created
            wks.add_write_handler(list, lambda worksheet, row, col, list, style: worksheet._write_rich_string(row, col, *list))
            self.sheets[sheet_name] = wks
        super(RichExcelWriter, self)._write_cells(cells, sheet_name, startrow, startcol, freeze_panes)

writer = RichExcelWriter('sample.xlsx')
workbook = writer.book
bold = workbook.add_format({'bold': True})

df = pd.DataFrame([["Hello world."], [["Hello", bold, "bold", "world."]]], columns = ["example"])

df.to_excel(writer, sheet_name='Sample', index=False)
writer.save()

这是目前为止我想出来的最简单的方法。

相关问题