Model.new_excel_range#
- Model.new_excel_range(name, path, range_, sheet=None, keyids=None, loadpath=None)#
创建一个对Excel范围的引用
从Excel文件中读取一个Excel范围,创建一个
ExcelRange
对象,并将其分配给名为name
的引用。该方法返回的对象是一个
ExcelRange
对象。 它是一个映射对象,具有与其他映射对象(如dict
)相同的方法和操作。 用户可以通过与dict
相同的操作符和方法,通过该对象读取和写入Excel文件中的值。ExcelRange
对象与绑定引用的模型相关联。ExcelRange
对象与引用之间的绑定关系由所属Model跟踪管理, 当绑定到ExcelRange
对象的所有引用都被删除时,该对象将被自动删除。ExcelRange
对象不能与其他对象存在Excel范围重叠。当绑定到
ExcelRange
对象的所有引用都被删除时,该对象将被删除。Excel范围数据从
loadpath
指定的工作簿中读取,并保存到path
。如果未提供loadpath
,则path
也用于读取。path
是一个类路径对象,可以是相对路径或绝对路径。如果给定的是相对路径,输出文件将成为内部数据文件。当该Model通过write_model()
或zip_model()
保存时,文件会被保存在模型文件夹或函数输出的压缩文件中,此时path
会被解释为相对于模型路径的相对路径。如果给定的是绝对路径,输出文件将成为外部数据文件,文件会被保存在模型文件夹或压缩文件之外。range_
参数接受一个字符串,表示Excel范围,例如"A1:D5",或命名范围的名称。当指定命名范围的名称时,sheet
参数将被忽略。keyids
参数用于指定范围中要作为键行和键列的行和列。keyids
参数接受一个字符串列表,每个元素都是以"r"或"c"开头,后跟一个从0开始的整数。 例如,["r0", "c1"]
表示range_
中的第1行和第2列按该顺序被解释为键。 如果未提供keyids
,则所有行和列都将被解释为值行和值列,并且这些值将被分配给从0开始的整数键。示例
假设以下是Book1.xlsx文件中Sheet1工作表的"A1:D4"区域。
AA
BB
0
11
21
1
12
22
2
13
23
以下代码在空间
space
中创建了一个名为x
的引用:>>> xlr = space.new_excel_range("x", "files/Book1.xlsx", "A1:D4", sheet="Sheet1", keys=["r0", "c0"], loadpath="Book1.xlsx")
范围内的值可以通过
[]
运算符访问。keyids
参数中的"r0"表示第一行,"c0"表示第一列。 因此传入[]
运算符的键取自行和列,例如:>>> xlr["BB", 1] 22 >>> space.x["BB", 1] 22 >>> dict(xlr) {('AA', 1): 11, ('AA', 2): 12, ('AA', 3): 13, ('BB', 1): 21, ('BB', 2): 22, ('BB', 3): 23}
不能在重叠的范围内创建多个
ExcelRange
对象。 当省略keyids
时,会自动分配从0开始的整数键:>>> xlr2 = space.new_excel_range("y", "files/Book1.xlsx", "B2:D4", sheet="Sheet1", loadpath="Book1.xlsx") ValueError: cannot add spec >>> del space.x >>> xlr2 = space.new_excel_range("y", "files/Book1.xlsx", "B2:D4", sheet="Sheet1", loadpath="Book1.xlsx") >>> dict(xlr2) {(0, 0): 11, (0, 1): 21, (1, 0): 12, (1, 1): 22, (2, 0): 13, (2, 1): 23}
注意
该方法从Excel文件中读取和写入数值,而非公式。对于
loadpath
文件中的公式单元格,将读取文件中存储的最后保存值。- Parameters:
另请参阅
在0.9.0版本中新增。