Python xlrd读取带超链接的单元格读不到数据

mm12vv 2018-03-27 02:37:52
我在用xlrd读取Excel 带超链接的单元格时候,无法读到内容,只能读到nan。
写入的代码如下:

excel = xlwt.Workbook(encoding = 'utf-8')
sheet = excel.add_sheet("123", cell_overwrite_ok=False)
temp_value = 'HYPERLINK("https://wwww.baidu.com";"百度一下")'
sheet.write(1, 1, xlwt.Formula(temp_value))
excel.save("1231.xls")

但是用xlrd读的时候无法读到内容。代码如下:

data = xlrd.open_workbook('1231.xls')
table = data.sheets()[0]
print (table.row_values(1))

结果:
['', '']
但是,当我打开excel文件,点一下超链接的单元格后,正常访问百度首页,并保存,就会有数据了。详细如下:

data = xlrd.open_workbook('1231.xls')
table = data.sheets()[0]
print (table.row_values(1))

结果:
['', '百度一下']

有没有大神解答下,如何解决这种问题?我个人的猜想是不是写入的时候有什么不妥的地方?麻烦了,谢谢!!!
...全文
1568 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈年椰子 2018-03-28
  • 打赏
  • 举报
回复
from openpyxl import load_workbook
sheet_index = 0
file_templet = r'd:\test.xlsx'
try:
    wb = load_workbook(file_templet,data_only=True)
    sheet_list = wb.get_sheet_names()
    ws = wb.get_sheet_by_name(sheet_list[sheet_index])
    print ws['C1'].value
    print ws.cell(row=1, column=3).value

except Exception, e:
    str_status = "模板" + file_templet + "读取错误"
陈年椰子 2018-03-28
  • 打赏
  • 举报
回复
引用 4 楼 mm12vv 的回复:
[quote=引用 3 楼 seakingx 的回复:] 公式是固定的, 写在模板文件里。 下面这个函数的功能是读取模板,写数据,保存成新文件。 新的文件,公式的值是刷新过的。

from openpyxl import load_workbook
def save_data(file_templet,sheet_index,row_index ,rs, file_save,key_index=0):
    #打开模板文件file_templet,选择sheet_index工作簿,从raw_index 行起保存结果集rs到文件file_save
    try:
        wb = load_workbook(file_templet)
        sheet_list = wb.get_sheet_names()
        ws = wb.get_sheet_by_name(sheet_list[sheet_index])
    except Exception,e:
        str_status = "模板" + file_templet + "读取错误"
        # print str_status,str(e)
        return str_status

    row_i = row_index-1
    for x in rs:
        row_i = row_i + 1
        y_i = 0
        ws['A%d' % row_i] =  row_i - row_index + 1
        for y in x:
            y_i = y_i + 1
            if y is None:
                ws[chr(ord('A')+y_i ) + '%d' % row_i] = ""
            else:
                ws[chr(ord('A') + y_i) + '%d' % row_i] = y
    # 保存文件
    try:
        wb.save(file_save)
    except Exception, e:
        # print repr(e)
        str_status = "保存文件" + file_save + "错误\n"+repr(e)
        return str_status
    else:
        return "成功生成报表" + file_save + " ," + str(row_i - row_index + 1) +"条。"
兄弟,多谢了!,你用openpyxl写了,然后在读带公式的单元格,读出的结果是公式本身还是公式对应的结果? 我试了下,只能读取公式本身,读值的话,还是读取不到[/quote] 改一下代码 , 增加 ,data_only=True , 那就是返回值了。
wb = load_workbook(file_templet,data_only=True)
陈年椰子 2018-03-28
  • 打赏
  • 举报
回复
from openpyxl import load_workbook
sheet_index = 0
file_templet = r'd:\test.xlsx'
file_save = r'd:\test2.xlsx'
try:
    wb = load_workbook(file_templet,data_only=True)
    sheet_list = wb.get_sheet_names()
    ws = wb.get_sheet_by_name(sheet_list[sheet_index])
    ws['B3'].value = '=HYPERLINK("https://wwww.baidu.com:", "百度一下")'
    ws['B3'].style = 'Hyperlink'
    wb.save(file_save)

except Exception, e:
    str_status = "模板" + file_templet + "读取错误"
试试这个
陈年椰子 2018-03-28
  • 打赏
  • 举报
回复
我的是 Python 2.7.13 openpyxl==2.4.9 可能是超链接和普通的公式不一样。
mm12vv 2018-03-28
  • 打赏
  • 举报
回复
引用 6 楼 seakingx 的回复:
from openpyxl import load_workbook
sheet_index = 0
file_templet = r'd:\test.xlsx'
try:
    wb = load_workbook(file_templet,data_only=True)
    sheet_list = wb.get_sheet_names()
    ws = wb.get_sheet_by_name(sheet_list[sheet_index])
    print ws['C1'].value
    print ws.cell(row=1, column=3).value

except Exception, e:
    str_status = "模板" + file_templet + "读取错误"
加了 ,data_only=True 这个选项,超链接的单元格,读出的是None,不加的话是超链的公式的 你是Python2.7的吧,我是Python3.6,openpyxl版本是:2.4.8
mm12vv 2018-03-27
  • 打赏
  • 举报
回复
引用 3 楼 seakingx 的回复:
公式是固定的, 写在模板文件里。 下面这个函数的功能是读取模板,写数据,保存成新文件。 新的文件,公式的值是刷新过的。

from openpyxl import load_workbook
def save_data(file_templet,sheet_index,row_index ,rs, file_save,key_index=0):
    #打开模板文件file_templet,选择sheet_index工作簿,从raw_index 行起保存结果集rs到文件file_save
    try:
        wb = load_workbook(file_templet)
        sheet_list = wb.get_sheet_names()
        ws = wb.get_sheet_by_name(sheet_list[sheet_index])
    except Exception,e:
        str_status = "模板" + file_templet + "读取错误"
        # print str_status,str(e)
        return str_status

    row_i = row_index-1
    for x in rs:
        row_i = row_i + 1
        y_i = 0
        ws['A%d' % row_i] =  row_i - row_index + 1
        for y in x:
            y_i = y_i + 1
            if y is None:
                ws[chr(ord('A')+y_i ) + '%d' % row_i] = ""
            else:
                ws[chr(ord('A') + y_i) + '%d' % row_i] = y
    # 保存文件
    try:
        wb.save(file_save)
    except Exception, e:
        # print repr(e)
        str_status = "保存文件" + file_save + "错误\n"+repr(e)
        return str_status
    else:
        return "成功生成报表" + file_save + " ," + str(row_i - row_index + 1) +"条。"
兄弟,多谢了!,你用openpyxl写了,然后在读带公式的单元格,读出的结果是公式本身还是公式对应的结果? 我试了下,只能读取公式本身,读值的话,还是读取不到
陈年椰子 2018-03-27
  • 打赏
  • 举报
回复
公式是固定的, 写在模板文件里。 下面这个函数的功能是读取模板,写数据,保存成新文件。 新的文件,公式的值是刷新过的。

from openpyxl import load_workbook
def save_data(file_templet,sheet_index,row_index ,rs, file_save,key_index=0):
    #打开模板文件file_templet,选择sheet_index工作簿,从raw_index 行起保存结果集rs到文件file_save
    try:
        wb = load_workbook(file_templet)
        sheet_list = wb.get_sheet_names()
        ws = wb.get_sheet_by_name(sheet_list[sheet_index])
    except Exception,e:
        str_status = "模板" + file_templet + "读取错误"
        # print str_status,str(e)
        return str_status

    row_i = row_index-1
    for x in rs:
        row_i = row_i + 1
        y_i = 0
        ws['A%d' % row_i] =  row_i - row_index + 1
        for y in x:
            y_i = y_i + 1
            if y is None:
                ws[chr(ord('A')+y_i ) + '%d' % row_i] = ""
            else:
                ws[chr(ord('A') + y_i) + '%d' % row_i] = y
    # 保存文件
    try:
        wb.save(file_save)
    except Exception, e:
        # print repr(e)
        str_status = "保存文件" + file_save + "错误\n"+repr(e)
        return str_status
    else:
        return "成功生成报表" + file_save + " ," + str(row_i - row_index + 1) +"条。"
mm12vv 2018-03-27
  • 打赏
  • 举报
回复
引用 1 楼 seakingx 的回复:
xlwt ,我碰到是公式不会自己计算,要打开再保存, 包含公式的单元格才会刷新。 估计这个超链接也是一样的情况。 用openpyxl 试试, 我用这个,就可以解决公式不刷新的问题。
老哥,那用openpyxl 是怎么写公式的,能不能给个例子,谢啦!!
陈年椰子 2018-03-27
  • 打赏
  • 举报
回复
xlwt ,我碰到是公式不会自己计算,要打开再保存, 包含公式的单元格才会刷新。 估计这个超链接也是一样的情况。 用openpyxl 试试, 我用这个,就可以解决公式不刷新的问题。

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧