在不删除其他工作表的情况下向现有的Excel工作表中添加一个工作表

4

我正在尝试向Excel文件ex.xls添加一个工作表,但每次添加后会删除之前创建的所有工作表。

如何在不删除其他工作表的情况下向该Excel文件添加工作表?

这是我的创建工作表的代码:

import xlwt
import xlrd

wb = Workbook()
Sheet1 = wb.add_sheet('Sheet1')
wb.save('ex.xls')

我猜你不能执行 Sheet2 = wb.add_sheet('Sheet2') - BruceWayne
我可以这样做,但这将创建两个新工作表并删除所有其他工作表。 - Nick M.
1
这是因为您正在创建一个新的工作簿(即新的Excel文件),添加一个工作表,然后覆盖您现有的Excel文件。我知道这并没有解决你的问题,Bernie已经做到了,但我想您可能会欣赏一下为什么会失败的解释。 - Bill Kidd
3个回答

8
我相信这是实现您想要的唯一方法:
import xlrd, xlwt
from xlutils.copy import copy as xl_copy

# open existing workbook
rb = xlrd.open_workbook('ex.xls', formatting_info=True)
# make a copy of it
wb = xl_copy(rb)
# add sheet to workbook with existing sheets
Sheet1 = wb.add_sheet('Sheet1')
wb.save('ex.xls')

谢谢,伙计。很高兴我能帮到你。 - mechanical_meat
如果您不介意,因为你是唯一真正了解这个问题的人:http://stackoverflow.com/questions/38063661/python-excel-how-to-turn-sheet-name-into-sheet-number - Nick M.
如何按名称引用,将第一个工作表中的所有内容复制到第五个工作表? - Nick M.
也许可以为此创建一个新问题。 - mechanical_meat
需要注意的是,xlrd仅用于读取现有的Excel文件,而xlwt仅用于写入。 这就是为什么Bernie向您展示需要使用utils进行桥接的原因。 在此,您可以看到现有文件被打开,数据被复制到新工作簿中,然后添加了一个新工作表,最后覆盖现有的Excel文件。 - Bill Kidd

3
以下是使用“openpyxl”在Excel工作簿中创建新表的方法。
import openpyxl

wb=openpyxl.load_workbook("Example_Excel.xlsx")
wb.create_sheet("Sheet1")  

如果工作表或工作簿尚不存在,则会出现错误,请避免这种情况。
import openpyxl

wb=openpyxl.load_workbook("Example_Excel.xlsx")
try:
    wb["Sheet1"]
except:
    wb.create_sheet("Sheet1") 

根据您想要使用的方式,以下是将信息写入多个页面的示例。

import openpyxl

work_book = 'Example_Excel.xlsx'
sheets = "Sheet1","Sheet2","Sheet3","Sheet4","Sheet5"

for current_sheet in sheets:
    wb=openpyxl.load_workbook(work_book)

    #if the sheet doesn't exist, create a new sheet
    try:
      wb[current_sheet]
    except:
      wb.create_sheet(current_sheet) 

    #wait for user to press "Enter" before starting on next sheet
    raw_input("Press Enter to continue...")

#The code for you wish repeated for each page
    #This example will print the sheet name to "B2" cell on that sheet
    cell ="B"+str(2)
    sheet=wb[current_sheet]
    sheet[cell].value= current_sheet

0

这是因为add_sheet函数会覆盖现有的工作表。相反,使用create_sheet函数可以解决您的问题。

ws1 = wb.create_sheet("Mysheet") # insert at the end (default)
ws2 = wb.create_sheet("Mysheet", 0) # insert at first position
ws3 = wb.create_sheet("Mysheet", -1) # insert at the penultimate position

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接