如何读取excel单元格,并在Python中保留或检测其格式

我给了一个包含一些文本格式的excel文件。 有些可以是大胆的 ,有些是斜体的 ,有些是超级1 ,还有一些是其他格式(但不是上面提到的三种)。

例子:

  • Ku'lah 2 ku.lah v ; 定义 :一些def; 用法 :一些用法;
  • He'lahsa 2 he.lah.sa n ; 定义 :一些def; 用法 :一些用法;
  • 等等

现在,由于这个单元格是作为字典( 真实 ,人类,字典)数据库条目制作的,所以我想保留这个单元格的格式,因为这会有利于告诉单词的用法(比如粗体上面的情况表明单词types: v (动词)和斜体表示新的部分)。

但是,这一切都在Excel的细胞。

当我尝试直接使用Toad for Oracle等数据库工具直接读取excel文件时,格式不见了!

  1. 有没有什么办法可以读取excel文件,但保留格式?
  2. 或者,有什么办法来检测格式? 只要我们可以检测到格式,我就可以用一些HTML格式(比如<b>v</b>replace文本,这将是我的工作。 我只想知道我们如何保留或检测Python中的Excel单元格文本格式。 (特别是这三种格式:粗体,斜体和超格)

编辑:

我试图用xlrd包得到文本格式,但我似乎无法find获取文本格式样式的方式,因为cell对象只包含: ctypevaluexf_index 。 它没有关于文本格式的信息,当我使用formatting_info=True创build实例时:

 book = xlrd.open_workbook("HuluHalaDict.xlsx", sys.stdout, 0, xlrd.USE_MMAP, None, None, \ formatting_info=True, on_demand=False, ragged_rows=False) 

我得到了以下错误:

NotImplementedError:formatting_info = True尚未实现

xlrd包的xlsx.py文件中由此行xlrd

 if formatting_info: raise NotImplementedError("formatting_info=True not yet implemented") 

我发现它很奇怪,因为我使用的版本是0.9.4 xlrd(latest), 文档说从0.6.1版本开始,包含格式信息:

默认格式

默认格式应用于所有空单元格(未由单元格logging描述)。 如果可用,首先使用行默认信息(ROWlogging,Rowinfo类)。 如果不可用,则使用列默认信息(COLINFOlogging,Colinfo类)。 作为最后的手段,将使用工作表/工作簿默认单元格格式; 这应该始终存在于Excel文件中,由固定索引15(从0开始)的XFlogging进行描述。 默认情况下,它使用第一个XFlogging(索引0)所描述的工作表/工作簿缺省单元格样式。 格式化function不包含在xlrd版本0.6.1中

丰富的文本,即包含部分粗斜体和下划线文本的string,string内字体的变化等。请参阅OOo文档s3.4和s3.2用于日语假名的亚洲语音文本(称为“ruby”)。 请参阅OOo文档s3.4.2(p15)条件格式。 请参阅OOo文档s5.12,s6.21(CONDFMTlogging),s6.16(CFlogging)其他工作表和书籍级别的项目,例如打印布局,屏幕窗格。 现代Excel文件版本不保留文件中的大部分内置“数字格式”; Excel根据用户的区域设置加载格式。 目前xlrd对此的模拟仅限于适用于美国英语区域设置的硬连线表格。 这可能意味着货币符号,date顺序,千位分隔符,小数点分隔符等是不合适的。 请注意,这不会影响正在复制XLS文件的用户,只会影响渲染单元格的用户。

我在这里犯了什么错误吗? 我的代码只是如图所示:

 book = xlrd.open_workbook("HuluHalaDict.xlsx", sys.stdout, 0, xlrd.USE_MMAP, None, None, \ formatting_info=True, on_demand=False, ragged_rows=False) 

编辑2:

在post中显示的例子显示它创build了formatting_info=True的类实例( book )。 但是我在执行中检查它。 它会引起上面的错误。 任何想法?

我build议你的图书馆xlrd https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html?p=4966

在GitHub这里https://github.com/python-excel/xlrd

你可以find一个简单的例子来说明如何使用xlrd来确定这里的字体样式使用XLRD模块和Python来确定单元格的字体样式(斜体或不斜体)

这里有一个实际例子:

 from xlrd import open_workbook path = '/Users/.../Desktop/Workbook1.xls' wb = open_workbook(path, formatting_info=True) sheet = wb.sheet_by_name("Sheet1") cell = sheet.cell(0, 0) # The first cell print("cell.xf_index is", cell.xf_index) fmt = wb.xf_list[cell.xf_index] print("type(fmt) is", type(fmt)) print("Dumped Info:") fmt.dump() 

它输出以下内容:

 cell.xf_index is 62 type(fmt) is <class 'xlrd.formatting.XF'> Dumped Info: _alignment_flag: 0 _background_flag: 0 _border_flag: 0 _font_flag: 1 _format_flag: 0 _protection_flag: 0 alignment (XFAlignment object): hor_align: 0 indent_level: 0 rotation: 0 shrink_to_fit: 0 text_direction: 0 text_wrapped: 0 vert_align: 2 background (XFBackground object): background_colour_index: 65 fill_pattern: 0 pattern_colour_index: 64 border (XFBorder object): bottom_colour_index: 0 bottom_line_style: 0 diag_colour_index: 0 diag_down: 0 diag_line_style: 0 diag_up: 0 left_colour_index: 0 left_line_style: 0 right_colour_index: 0 right_line_style: 0 top_colour_index: 0 top_line_style: 0 font_index: 6 format_key: 0 is_style: 0 lotus_123_prefix: 0 parent_style_index: 0 protection (XFProtection object): cell_locked: 1 formula_hidden: 0 xf_index: 62 

其中_font_flag: 1表示粗体