Xlsx Writer:如何在单个单元格中使用多种格式编写字符串

3

我有一个包含多个分号的字符串。

'firstline: abc \n secondline: bcd \n thirdline: efg'

我想使用Xlsx Writer在Excel单元格中写入以下字符串:

第一行: abc
第二行: bcd
第三行: efg

这是我的做法:

description_combined = 
    '''
    firstline: abc
    secondline: bcd
    thirdline: efg
    '''
    spanInserted = []
    spanInserted = description_combined.split("\n")
    result = ''

    for spans in spanInserted:
        strr1 =  '{}:'.format(spans.split(":")[0])
        strr2 = spans.split(":")[1]
        result += '''bold , "{}" , "{}" ,'''.format(str(strr1),str(strr2))

    result = result[:-1]
    # print result

    worksheet.write_rich_string('A1', result)  


这是我在Excel单元格中得到的结果:

粗体,"第一行:","abc",粗体,"第二行:","bcd",粗体,"第三行:","efg"


你想要一行还是三行? - Giordano
@Giordano 我想要使用单个字符串的拆分来实现动态行。jmcnamara的答案很有效。 - Manoj
好的@Manoj,我已经发布了一个动态解决方案。希望会有所帮助。 - Giordano
2个回答

8

write_string() 方法需要一个列表作为参数,但您却传递了一个字符串。

您可以使用以下方式传递您的字符串和格式列表:

result = [bold, 'firstline: ',  'abc',
          bold, 'secondline: ', 'bcd',
          bold, 'thirdline: ',  'efg']

worksheet.write_rich_string('A1', *result)

然而,如果您想要文本内容也进行换行,您需要在列表末尾添加一个text_wrap单元格格式,并在需要换行的位置添加新行。类似于以下方式:

import xlsxwriter

workbook = xlsxwriter.Workbook('rich_strings.xlsx')
worksheet = workbook.add_worksheet()

worksheet.set_column('A:A', 20)
worksheet.set_row(0, 60)

bold = workbook.add_format({'bold': True})
text_wrap = workbook.add_format({'text_wrap': True, 'valign': 'top'})

result = [bold, 'firstline: ',  'abc\n',
          bold, 'secondline: ', 'bcd\n',
          bold, 'thirdline: ',  'efg']

result.append(text_wrap)

worksheet.write_rich_string('A1', *result)

workbook.close()

输出:

在此输入图片描述


(注:本文包含HTML标签,已翻译)

2
jmcnamara的解决方案效果很好。我发布了一个类似但是动态的可能解决方案。
import xlsxwriter
workbook = xlsxwriter.Workbook("<your path>")
worksheet = workbook.add_worksheet()
# add style for first column
cell_format = workbook.add_format({'bold': True})
text_wrap = workbook.add_format({'text_wrap': True, 'valign': 'top'})
data = []
description_combined = 'firstline: abc \n secondline: bcd \n thirdline: efg'
# prepare list of list
for item in description_combined.split("\n"):
    data.append(cell_format)
    data.append(item.split(":")[0].strip() + ":")
    data.append(item.split(":")[1] + "\n")

# write data in one single cell
data.append(text_wrap)

worksheet.write_rich_string('A1', *data)

workbook.close()

我希望你能够帮到您


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接