Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python XLRD使用范围_Python_Excel_Range_Xlrd - Fatal编程技术网

Python XLRD使用范围

Python XLRD使用范围,python,excel,range,xlrd,Python,Excel,Range,Xlrd,我想为变量指定一个excel范围: import xlrd file = r"C:\Users\Lisa\Desktop\Frank\export.XLSX" book = xlrd.open_workbook(file) sheet = book.sheet_by_index(0) data = [range("A3:D7")] ,但我得到一个错误: data = [range("A3:D7")] TypeError: 'str' object cannot be interpre

我想为变量指定一个excel范围:

import xlrd

file = r"C:\Users\Lisa\Desktop\Frank\export.XLSX"
book = xlrd.open_workbook(file)
sheet = book.sheet_by_index(0)
data = [range("A3:D7")]
,但我得到一个错误:

    data = [range("A3:D7")]
TypeError: 'str' object cannot be interpreted as an integer

有什么想法吗?

您可以使用以下方法从XLSX文件中提取块,如下所示:

import xlrd

workbook = xlrd.open_workbook(r"input.xlsx")
sheet = workbook.sheet_by_index(0)

def get_cell_range(start_col, start_row, end_col, end_row):
    return [sheet.row_slice(row, start_colx=start_col, end_colx=end_col+1) for row in xrange(start_row, end_row+1)]

data = get_cell_range(0, 2, 3, 6)   # A3 to D7
print data

xlrd
使用从
0
开始的列和行号,而不是Excel单元格名称。它只能使用
xlrd.cellname()
将Excel单元格引用从col行格式转换为
A1
格式,反之亦然。

我也遇到了同样的问题。我就是这样解决的

首先,我创建了一个与
xlrd.cellname()
相反的函数,然后继续使用该函数获取值​​射程

import xlrd
import re

def parse_cell(cell):
    r = re.compile("([a-zA-Z]+)([0-9]+)")
    m = r.match(cell)
    col = m.group(1).upper()
    number_row = int(m.group(2)) - 1

    ABC = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]

    number_col = 0
    for char in col:
        number_col += ABC.index(char)

    return (number_row, number_col)


def get_cell_range_values(sheet, start_cell, end_cell):
    start_cell_parsed = parse_cell(start_cell)
    end_cell_parsed = parse_cell(end_cell)

    data = sheet.col_values(start_rowx=start_cell_parsed[0], colx=start_cell_parsed[1], end_rowx=end_cell_parsed[0] + 1)
    return data


file = r"C:\Users\Lisa\Desktop\Frank\export.XLSX"
book = xlrd.open_workbook(file)
sheet = book.sheet_by_index(0)
data = get_cell_range_values(sheet, "A3", "A130")

请记住,您只获得线性范围,而不创建矩阵

此处使用的
范围
是指python内置的,而不是
xlrd.range
。当我使用xlrd.range时,我会得到以下错误:“AttributeError:module'xlrd'没有属性'range'”。没错,它没有该函数。我刚刚指出,
range
与Python相关,而不是xlrd。您知道我如何引用excel范围吗?我尝试了sheet.range,但它不可用。您的意思是希望变量“data”是工作表单元格范围内的值列表吗?自己编写代码不会那么难。