【问题标题】:Using XLRD module and Python to determine cell font style (italics or not)使用 XLRD 模块和 Python 确定单元格字体样式(斜体与否)
【发布时间】:2011-07-18 16:06:17
【问题描述】:

我正在尝试使用 XLRD 解析 Excel 电子表格中的数据,以确定哪些单元格值是斜体的。此信息将用于设置一个标志,以确定该值是估计值还是报告值。以下是数据示例:

owner_name          year    Jan     Feb     Mar     Apr     May     Jun     Jul     Aug     Sep     Oct     Nov     Dec
Alachua, city of    1978    17.4    15.7    16.7    18.3    18.9    18.9    19.2    17.4    19.5    19.8    17.1    16.4
Archer, city of     1978    5.6      3.6     4.3     4.5     4.7     4.8     5.3     5.3     5.4     5.6     3.9     2.8

除了尝试一些基本功能以了解如何从电子表格中提取数据之外,我还没有大量使用 XLRD。现在我需要添加一些额外的功能来识别斜体单元格值。

提前感谢您的帮助...

编辑: XLRD 为我提供了我需要的功能;感谢 John Machin 的回答。这是代码:

import xlrd

book = xlrd.open_workbook('fl_data.xls',formatting_info=True)
sh = book.sheet_by_index(0)

for row in range(0,sh.nrows):
    font = book.font_list
    cell_val = sh.cell_value(row,1)
    cell_xf = book.xf_list[sh.cell_xf_index(row,1)]

    print cell_val,font[cell_xf.font_index].italic

【问题讨论】:

  • 如果有更好的方法,我也愿意使用 win32com。我已经用 MakePy.py 构建了 Microsoft Excel 库。
  • 您在编辑中的解决方案使用斜体,但它似乎不适用于粗体和下划线(分别在代码的最后一行替换 italicboldunderlined )。知道为什么吗?
  • 好吧,看起来我应该使用underline_type而不是下划线,而不是bold,我应该检查weight(正常文本是400,粗体是700)。至少,这是在 Xubuntu 上的 LibreOffice 中保存的 .xls 文件。 print(font[cell_xf.font_index].__dict__) 告诉设置什么。无论如何,这仍然无法解释为什么 boldunderlined 不会改变。

标签: python xlrd


【解决方案1】:

我的解决方案是基于 'timmorgan' 编写的一个类,可以在 here 找到。该课程要求您希望操作的 excel 文档处于打开状态。然后创建 excel 文档对象,然后调用返回范围对象的“get_range”方法。然后可以使用此范围对象来获取指定单元格的字体属性。

#--Requires excel document to be open
import pyexcel
book = pyexcel.ExcelDocument(visible=True) #--keeps excel open
cell = 'r171'
r = book.get_range(cell)
val = book.get_value(cell)

print val, r.font.italic, r.font.name

【讨论】:

  • 实际上,当我尝试导入 XLRD 模块并使用它来获取列名时,这对我不起作用。如果我可以让它再次工作,我会更新。
  • book excel 文档对象继续具有 get_range 方法,但生成的范围对象 r 不再具有字体方法。 print r 会导致单元格的值,尽管我收到的错误消息是:“AttributeError: '' object has no attribute 'font'”
【解决方案2】:

使用 xlrd(单独使用,不使用 pyexcel):

这是link to a topic to the python-excel google-group。这是关于获得字体颜色的,但这可以让你完成 99% 的工作。

【讨论】:

  • 成功了,谢谢约翰。和南希一样,我在翻阅手册时遇到了一些麻烦。你对她的回复让我走上了我需要的道路。作为记录,我将代码发布为对上述问题的编辑。
  • 对于那些没有阅读足够多的问题而无法看到编辑的人(并且正在疯狂地试图弄清楚这一点)的注释,Jason 的解决方案就在问题中。
猜你喜欢
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多