以下是一些代码:
from openpyxl import load_workbook
wb = load_workbook('myfile.xlsx')
ws = wb.active
# data for filling Excel table
rows = (
(88, 46, 57),
(89, 38, 12),
(23, 59, 78),
(56, 21, 98),
(24, 18, 43),
(34, 15, 67)
)
for row in rows:
ws.append(row)
wb.save('my_changed_file.xlsx')
执行上面的代码后,我希望看到第一行填充了Excel表,但是第二行填充了该表。
为什么append
方法可以正常工作?
答案 0 :(得分:1)
这不是append
的错。每个工作簿在启动时至少具有一行和一列。不久前,我遇到了类似的问题:Determine if worksheet is empty in openpyxl。根据作者(Charlie Clark)的说法,内部计数器max_row
和max_column
必须始终严格为正,因此append
将始终写入第二行。
您始终可以在控制索引的循环中设置单元格,这与append
的操作非常相似,很方便:
for r, row in enumerate(data, start=1):
for c, value in enumerate(row, start=1):
worksheet.cell(row=r, column=c).value = value
填充A1后,append
会完全按照您的期望工作。
答案 1 :(得分:0)
我遇到了同样的问题-空行自动出现,直到这个线程之前都不知道为什么。
将分享我的最终解决方案:
import java.util.Observable;
public class UserModel extends Observable {
public enum ChangedValue {
ID, //
NAME, //
EMAIL, //
//...
}
private Integer id;
private String name;
private String email;
//...
public void setId(Integer id) {
this.id = id;
setChanged();
notifyObservers(ChangedValue.ID);//use the enum types as parameters here
}
public void setName(String name) {
this.name = name;
setChanged();
notifyObservers(ChangedValue.NAME);
}
public void setEmail(String email) {
this.name = email;
setChanged();
notifyObservers(ChangedValue.EMAIL);
}
}