如何使用 Pandas 在现有 excel 文件中保存新的 sheet?
How to save a new sheet in an existing excel file, using Pandas?
我想使用 excel 文件来存储用 python 详细说明的数据。我的问题是我无法将工作表添加到现有 excel 文件。在这里,我建议使用一个示例代码来解决这个问题
import pandas as pd
import numpy as np
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
x1 = np.random.randn(100, 2)
df1 = pd.DataFrame(x1)
x2 = np.random.randn(100, 2)
df2 = pd.DataFrame(x2)
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
df1.to_excel(writer, sheet_name = 'x1')
df2.to_excel(writer, sheet_name = 'x2')
writer.save()
writer.close()
此代码将两个 DataFrame 保存到两个工作表中,分别命名为 "x1" 和 "x2"。如果我创建两个新的 DataFrame 并尝试使用相同的代码添加两个新工作表 'x3' 和 'x4',则原始数据将丢失。
import pandas as pd
import numpy as np
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
x3 = np.random.randn(100, 2)
df3 = pd.DataFrame(x3)
x4 = np.random.randn(100, 2)
df4 = pd.DataFrame(x4)
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
df3.to_excel(writer, sheet_name = 'x3')
df4.to_excel(writer, sheet_name = 'x4')
writer.save()
writer.close()
我想要一个包含四张纸的 excel 文件:'x1'、'x2'、'x3'、'x4'。
我知道'xlsxwriter'不是唯一的"engine",还有'openpyxl'。我也看到已经有其他人写过这个问题,但我还是不明白该怎么做。
这里是取自这个 link
的代码
import pandas
from openpyxl import load_workbook
book = load_workbook('Masterfile.xlsx')
writer = pandas.ExcelWriter('Masterfile.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
data_filtered.to_excel(writer, "Main", cols=['Diff1', 'Diff2'])
writer.save()
他们说它有效,但很难弄清楚它是如何工作的。我不明白 "ws.title"、"ws" 和 "dict" 是什么意思。
保存"x1"和"x2"哪个最好,然后关闭文件,再次打开并添加"x3"和"x4"?
在您分享的示例中,您将现有文件加载到 book
并将 writer.book
值设置为 book
。在行 writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
中,您正在以 ws
的形式访问工作簿中的每个 sheet。 sheet 标题然后是 ws
所以你正在创建一个 {sheet_titles: sheet}
键值对的字典。然后将此字典设置为 writer.sheets。 本质上,这些步骤只是从 'Masterfile.xlsx'
加载现有数据并用它们填充您的编写器。
现在假设您已经有一个 x1
和 x2
作为 sheet 的文件。您可以使用示例代码加载文件,然后可以执行类似这样的操作来添加 x3
和 x4
。
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
writer = pd.ExcelWriter(path, engine='openpyxl')
df3.to_excel(writer, 'x3', index=False)
df4.to_excel(writer, 'x4', index=False)
writer.save()
这应该能满足您的需求。
我强烈建议您直接使用 openpyxl since it now supports Pandas DataFrames。
这让您可以专注于相关的 Excel 和 Pandas 代码。
谢谢。我相信一个完整的例子可能对其他有同样问题的人有好处:
import pandas as pd
import numpy as np
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
x1 = np.random.randn(100, 2)
df1 = pd.DataFrame(x1)
x2 = np.random.randn(100, 2)
df2 = pd.DataFrame(x2)
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
df1.to_excel(writer, sheet_name = 'x1')
df2.to_excel(writer, sheet_name = 'x2')
writer.save()
writer.close()
这里我生成了一个excel文件,根据我的理解,它是通过"xslxwriter"还是"openpyxl"引擎生成的并不重要。
当我想在不丢失原始数据的情况下写入时
import pandas as pd
import numpy as np
from openpyxl import load_workbook
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
book = load_workbook(path)
writer = pd.ExcelWriter(path, engine = 'openpyxl')
writer.book = book
x3 = np.random.randn(100, 2)
df3 = pd.DataFrame(x3)
x4 = np.random.randn(100, 2)
df4 = pd.DataFrame(x4)
df3.to_excel(writer, sheet_name = 'x3')
df4.to_excel(writer, sheet_name = 'x4')
writer.save()
writer.close()
此代码可以完成工作!
一次将多个数据写入excel的简单示例。以及当您想将数据附加到写入的 excel 文件(关闭的 excel 文件)上的 sheet 时。
当您第一次写入 excel 时。 (将 "df1" 和 "df2" 写入“1st_sheet”和“2nd_sheet”)
import pandas as pd
from openpyxl import load_workbook
df1 = pd.DataFrame([[1],[1]], columns=['a'])
df2 = pd.DataFrame([[2],[2]], columns=['b'])
df3 = pd.DataFrame([[3],[3]], columns=['c'])
excel_dir = "my/excel/dir"
with pd.ExcelWriter(excel_dir, engine='xlsxwriter') as writer:
df1.to_excel(writer, '1st_sheet')
df2.to_excel(writer, '2nd_sheet')
writer.save()
在您关闭 excel 之后,但您希望 "append" 数据在同一个 excel 文件中,但另一个 sheet,假设 "df3" sheet 名称“3rd_sheet”。
book = load_workbook(excel_dir)
with pd.ExcelWriter(excel_dir, engine='openpyxl') as writer:
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
## Your dataframe to append.
df3.to_excel(writer, '3rd_sheet')
writer.save()
注意excel格式不能是xls,可以用xlsx。
您可以将您感兴趣的现有工作表(例如 'x1'、'x2')读入内存,然后 'write' 在添加更多新工作表之前将其返回(请记住文件中的表格和内存中的表格是两个不同的东西,如果你不阅读它们,它们就会丢失)。此方法仅使用 'xlsxwriter',不涉及 openpyxl。
import pandas as pd
import numpy as np
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
# begin <== read selected sheets and write them back
df1 = pd.read_excel(path, sheet_name='x1', index_col=0) # or sheet_name=0
df2 = pd.read_excel(path, sheet_name='x2', index_col=0) # or sheet_name=1
writer = pd.ExcelWriter(path, engine='xlsxwriter')
df1.to_excel(writer, sheet_name='x1')
df2.to_excel(writer, sheet_name='x2')
# end ==>
# now create more new sheets
x3 = np.random.randn(100, 2)
df3 = pd.DataFrame(x3)
x4 = np.random.randn(100, 2)
df4 = pd.DataFrame(x4)
df3.to_excel(writer, sheet_name='x3')
df4.to_excel(writer, sheet_name='x4')
writer.save()
writer.close()
如果你想保留所有现有的工作表,你可以将上面的开始和结束之间的代码替换为:
# read all existing sheets and write them back
writer = pd.ExcelWriter(path, engine='xlsxwriter')
xlsx = pd.ExcelFile(path)
for sheet in xlsx.sheet_names:
df = xlsx.parse(sheet_name=sheet, index_col=0)
df.to_excel(writer, sheet_name=sheet)
#This program is to read from excel workbook to fetch only the URL domain names and write to the existing excel workbook in a different sheet..
#Developer - Nilesh K
import pandas as pd
from openpyxl import load_workbook #for writting to the existing workbook
df = pd.read_excel("urlsearch_test.xlsx")
#You can use the below for the relative path.
# r"C:\Users\xyz\Desktop\Python\
l = [] #To make a list in for loop
#begin
#loop starts here for fetching http from a string and iterate thru the entire sheet. You can have your own logic here.
for index, row in df.iterrows():
try:
str = (row['TEXT']) #string to read and iterate
y = (index)
str_pos = str.index('http') #fetched the index position for http
str_pos1 = str.index('/', str.index('/')+2) #fetched the second 3rd position of / starting from http
str_op = str[str_pos:str_pos1] #Substring the domain name
l.append(str_op) #append the list with domain names
#Error handling to skip the error rows and continue.
except ValueError:
print('Error!')
print(l)
l = list(dict.fromkeys(l)) #Keep distinct values, you can comment this line to get all the values
df1 = pd.DataFrame(l,columns=['URL']) #Create dataframe using the list
#end
#Write using openpyxl so it can be written to same workbook
book = load_workbook('urlsearch_test.xlsx')
writer = pd.ExcelWriter('urlsearch_test.xlsx',engine = 'openpyxl')
writer.book = book
df1.to_excel(writer,sheet_name = 'Sheet3')
writer.save()
writer.close()
#The below can be used to write to a different workbook without using openpyxl
#df1.to_excel(r"C:\Users\xyz\Desktop\Python\urlsearch1_test.xlsx",index='false',sheet_name='sheet1')
另一种相当简单的方法是制作如下方法:
def _write_frame_to_new_sheet(path_to_file=None, sheet_name='sheet', data_frame=None):
book = None
try:
book = load_workbook(path_to_file)
except Exception:
logging.debug('Creating new workbook at %s', path_to_file)
with pd.ExcelWriter(path_to_file, engine='openpyxl') as writer:
if book is not None:
writer.book = book
data_frame.to_excel(writer, sheet_name, index=False)
这里的想法是加载 path_to_file 处的工作簿(如果存在)然后附加 data_frame 作为新的 sheet 和 sheet_name。如果工作簿不存在,则会创建它。似乎 openpyxl 或 xlsxwriter 都没有附加,所以就像上面@Stefano 的例子一样,你真的必须加载然后重写才能附加。
不使用ExcelWriter也可以,使用openpyxl中的工具
这可以使用 openpyxl.styles
更轻松地向新的 sheet 添加字体
import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
#Location of original excel sheet
fileLocation =r'C:\workspace\data.xlsx'
#Location of new file which can be the same as original file
writeLocation=r'C:\workspace\dataNew.xlsx'
data = {'Name':['Tom','Paul','Jeremy'],'Age':[32,43,34],'Salary':[20000,34000,32000]}
#The dataframe you want to add
df = pd.DataFrame(data)
#Load existing sheet as it is
book = load_workbook(fileLocation)
#create a new sheet
sheet = book.create_sheet("Sheet Name")
#Load dataframe into new sheet
for row in dataframe_to_rows(df, index=False, header=True):
sheet.append(row)
#Save the modified excel at desired location
book.save(writeLocation)
用于创建新文件
x1 = np.random.randn(100, 2)
df1 = pd.DataFrame(x1)
with pd.ExcelWriter('sample.xlsx') as writer:
df1.to_excel(writer, sheet_name='x1')
要附加到文件,请在 pd.ExcelWriter
中使用参数 mode='a'
。
x2 = np.random.randn(100, 2)
df2 = pd.DataFrame(x2)
with pd.ExcelWriter('sample.xlsx', engine='openpyxl', mode='a') as writer:
df2.to_excel(writer, sheet_name='x2')
默认值为 mode ='w'
。
参见 documentation。
import pandas as pd
import openpyxl
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')
data_df.to_excel(writer, 'sheet_name')
writer.save()
writer.close()
每次你想保存一个Pandas DataFrame到一个Excel,你可以调用这个函数:
import os
def save_excel_sheet(df, filepath, sheetname, index=False):
# Create file if it does not exist
if not os.path.exists(filepath):
df.to_excel(filepath, sheet_name=sheetname, index=index)
# Otherwise, add a sheet. Overwrite if there exists one with the same name.
else:
with pd.ExcelWriter(filepath, engine='openpyxl', if_sheet_exists='replace', mode='a') as writer:
df.to_excel(writer, sheet_name=sheetname, index=index)
如果要加空sheet
xw = pd.ExcelWriter(file_path, engine='xlsxwriter')
pd.DataFrame().to_excel(xw, 'sheet11')
如果你变空了sheet
sheet = xw.sheets['sheet11']
我想使用 excel 文件来存储用 python 详细说明的数据。我的问题是我无法将工作表添加到现有 excel 文件。在这里,我建议使用一个示例代码来解决这个问题
import pandas as pd
import numpy as np
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
x1 = np.random.randn(100, 2)
df1 = pd.DataFrame(x1)
x2 = np.random.randn(100, 2)
df2 = pd.DataFrame(x2)
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
df1.to_excel(writer, sheet_name = 'x1')
df2.to_excel(writer, sheet_name = 'x2')
writer.save()
writer.close()
此代码将两个 DataFrame 保存到两个工作表中,分别命名为 "x1" 和 "x2"。如果我创建两个新的 DataFrame 并尝试使用相同的代码添加两个新工作表 'x3' 和 'x4',则原始数据将丢失。
import pandas as pd
import numpy as np
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
x3 = np.random.randn(100, 2)
df3 = pd.DataFrame(x3)
x4 = np.random.randn(100, 2)
df4 = pd.DataFrame(x4)
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
df3.to_excel(writer, sheet_name = 'x3')
df4.to_excel(writer, sheet_name = 'x4')
writer.save()
writer.close()
我想要一个包含四张纸的 excel 文件:'x1'、'x2'、'x3'、'x4'。 我知道'xlsxwriter'不是唯一的"engine",还有'openpyxl'。我也看到已经有其他人写过这个问题,但我还是不明白该怎么做。
这里是取自这个 link
的代码import pandas
from openpyxl import load_workbook
book = load_workbook('Masterfile.xlsx')
writer = pandas.ExcelWriter('Masterfile.xlsx', engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
data_filtered.to_excel(writer, "Main", cols=['Diff1', 'Diff2'])
writer.save()
他们说它有效,但很难弄清楚它是如何工作的。我不明白 "ws.title"、"ws" 和 "dict" 是什么意思。
保存"x1"和"x2"哪个最好,然后关闭文件,再次打开并添加"x3"和"x4"?
在您分享的示例中,您将现有文件加载到 book
并将 writer.book
值设置为 book
。在行 writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
中,您正在以 ws
的形式访问工作簿中的每个 sheet。 sheet 标题然后是 ws
所以你正在创建一个 {sheet_titles: sheet}
键值对的字典。然后将此字典设置为 writer.sheets。 本质上,这些步骤只是从 'Masterfile.xlsx'
加载现有数据并用它们填充您的编写器。
现在假设您已经有一个 x1
和 x2
作为 sheet 的文件。您可以使用示例代码加载文件,然后可以执行类似这样的操作来添加 x3
和 x4
。
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
writer = pd.ExcelWriter(path, engine='openpyxl')
df3.to_excel(writer, 'x3', index=False)
df4.to_excel(writer, 'x4', index=False)
writer.save()
这应该能满足您的需求。
我强烈建议您直接使用 openpyxl since it now supports Pandas DataFrames。
这让您可以专注于相关的 Excel 和 Pandas 代码。
谢谢。我相信一个完整的例子可能对其他有同样问题的人有好处:
import pandas as pd
import numpy as np
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
x1 = np.random.randn(100, 2)
df1 = pd.DataFrame(x1)
x2 = np.random.randn(100, 2)
df2 = pd.DataFrame(x2)
writer = pd.ExcelWriter(path, engine = 'xlsxwriter')
df1.to_excel(writer, sheet_name = 'x1')
df2.to_excel(writer, sheet_name = 'x2')
writer.save()
writer.close()
这里我生成了一个excel文件,根据我的理解,它是通过"xslxwriter"还是"openpyxl"引擎生成的并不重要。
当我想在不丢失原始数据的情况下写入时
import pandas as pd
import numpy as np
from openpyxl import load_workbook
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
book = load_workbook(path)
writer = pd.ExcelWriter(path, engine = 'openpyxl')
writer.book = book
x3 = np.random.randn(100, 2)
df3 = pd.DataFrame(x3)
x4 = np.random.randn(100, 2)
df4 = pd.DataFrame(x4)
df3.to_excel(writer, sheet_name = 'x3')
df4.to_excel(writer, sheet_name = 'x4')
writer.save()
writer.close()
此代码可以完成工作!
一次将多个数据写入excel的简单示例。以及当您想将数据附加到写入的 excel 文件(关闭的 excel 文件)上的 sheet 时。
当您第一次写入 excel 时。 (将 "df1" 和 "df2" 写入“1st_sheet”和“2nd_sheet”)
import pandas as pd
from openpyxl import load_workbook
df1 = pd.DataFrame([[1],[1]], columns=['a'])
df2 = pd.DataFrame([[2],[2]], columns=['b'])
df3 = pd.DataFrame([[3],[3]], columns=['c'])
excel_dir = "my/excel/dir"
with pd.ExcelWriter(excel_dir, engine='xlsxwriter') as writer:
df1.to_excel(writer, '1st_sheet')
df2.to_excel(writer, '2nd_sheet')
writer.save()
在您关闭 excel 之后,但您希望 "append" 数据在同一个 excel 文件中,但另一个 sheet,假设 "df3" sheet 名称“3rd_sheet”。
book = load_workbook(excel_dir)
with pd.ExcelWriter(excel_dir, engine='openpyxl') as writer:
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
## Your dataframe to append.
df3.to_excel(writer, '3rd_sheet')
writer.save()
注意excel格式不能是xls,可以用xlsx。
您可以将您感兴趣的现有工作表(例如 'x1'、'x2')读入内存,然后 'write' 在添加更多新工作表之前将其返回(请记住文件中的表格和内存中的表格是两个不同的东西,如果你不阅读它们,它们就会丢失)。此方法仅使用 'xlsxwriter',不涉及 openpyxl。
import pandas as pd
import numpy as np
path = r"C:\Users\fedel\Desktop\excelData\PhD_data.xlsx"
# begin <== read selected sheets and write them back
df1 = pd.read_excel(path, sheet_name='x1', index_col=0) # or sheet_name=0
df2 = pd.read_excel(path, sheet_name='x2', index_col=0) # or sheet_name=1
writer = pd.ExcelWriter(path, engine='xlsxwriter')
df1.to_excel(writer, sheet_name='x1')
df2.to_excel(writer, sheet_name='x2')
# end ==>
# now create more new sheets
x3 = np.random.randn(100, 2)
df3 = pd.DataFrame(x3)
x4 = np.random.randn(100, 2)
df4 = pd.DataFrame(x4)
df3.to_excel(writer, sheet_name='x3')
df4.to_excel(writer, sheet_name='x4')
writer.save()
writer.close()
如果你想保留所有现有的工作表,你可以将上面的开始和结束之间的代码替换为:
# read all existing sheets and write them back
writer = pd.ExcelWriter(path, engine='xlsxwriter')
xlsx = pd.ExcelFile(path)
for sheet in xlsx.sheet_names:
df = xlsx.parse(sheet_name=sheet, index_col=0)
df.to_excel(writer, sheet_name=sheet)
#This program is to read from excel workbook to fetch only the URL domain names and write to the existing excel workbook in a different sheet..
#Developer - Nilesh K
import pandas as pd
from openpyxl import load_workbook #for writting to the existing workbook
df = pd.read_excel("urlsearch_test.xlsx")
#You can use the below for the relative path.
# r"C:\Users\xyz\Desktop\Python\
l = [] #To make a list in for loop
#begin
#loop starts here for fetching http from a string and iterate thru the entire sheet. You can have your own logic here.
for index, row in df.iterrows():
try:
str = (row['TEXT']) #string to read and iterate
y = (index)
str_pos = str.index('http') #fetched the index position for http
str_pos1 = str.index('/', str.index('/')+2) #fetched the second 3rd position of / starting from http
str_op = str[str_pos:str_pos1] #Substring the domain name
l.append(str_op) #append the list with domain names
#Error handling to skip the error rows and continue.
except ValueError:
print('Error!')
print(l)
l = list(dict.fromkeys(l)) #Keep distinct values, you can comment this line to get all the values
df1 = pd.DataFrame(l,columns=['URL']) #Create dataframe using the list
#end
#Write using openpyxl so it can be written to same workbook
book = load_workbook('urlsearch_test.xlsx')
writer = pd.ExcelWriter('urlsearch_test.xlsx',engine = 'openpyxl')
writer.book = book
df1.to_excel(writer,sheet_name = 'Sheet3')
writer.save()
writer.close()
#The below can be used to write to a different workbook without using openpyxl
#df1.to_excel(r"C:\Users\xyz\Desktop\Python\urlsearch1_test.xlsx",index='false',sheet_name='sheet1')
另一种相当简单的方法是制作如下方法:
def _write_frame_to_new_sheet(path_to_file=None, sheet_name='sheet', data_frame=None):
book = None
try:
book = load_workbook(path_to_file)
except Exception:
logging.debug('Creating new workbook at %s', path_to_file)
with pd.ExcelWriter(path_to_file, engine='openpyxl') as writer:
if book is not None:
writer.book = book
data_frame.to_excel(writer, sheet_name, index=False)
这里的想法是加载 path_to_file 处的工作簿(如果存在)然后附加 data_frame 作为新的 sheet 和 sheet_name。如果工作簿不存在,则会创建它。似乎 openpyxl 或 xlsxwriter 都没有附加,所以就像上面@Stefano 的例子一样,你真的必须加载然后重写才能附加。
不使用ExcelWriter也可以,使用openpyxl中的工具
这可以使用 openpyxl.styles
import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
#Location of original excel sheet
fileLocation =r'C:\workspace\data.xlsx'
#Location of new file which can be the same as original file
writeLocation=r'C:\workspace\dataNew.xlsx'
data = {'Name':['Tom','Paul','Jeremy'],'Age':[32,43,34],'Salary':[20000,34000,32000]}
#The dataframe you want to add
df = pd.DataFrame(data)
#Load existing sheet as it is
book = load_workbook(fileLocation)
#create a new sheet
sheet = book.create_sheet("Sheet Name")
#Load dataframe into new sheet
for row in dataframe_to_rows(df, index=False, header=True):
sheet.append(row)
#Save the modified excel at desired location
book.save(writeLocation)
用于创建新文件
x1 = np.random.randn(100, 2)
df1 = pd.DataFrame(x1)
with pd.ExcelWriter('sample.xlsx') as writer:
df1.to_excel(writer, sheet_name='x1')
要附加到文件,请在 pd.ExcelWriter
中使用参数 mode='a'
。
x2 = np.random.randn(100, 2)
df2 = pd.DataFrame(x2)
with pd.ExcelWriter('sample.xlsx', engine='openpyxl', mode='a') as writer:
df2.to_excel(writer, sheet_name='x2')
默认值为 mode ='w'
。
参见 documentation。
import pandas as pd
import openpyxl
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')
data_df.to_excel(writer, 'sheet_name')
writer.save()
writer.close()
每次你想保存一个Pandas DataFrame到一个Excel,你可以调用这个函数:
import os
def save_excel_sheet(df, filepath, sheetname, index=False):
# Create file if it does not exist
if not os.path.exists(filepath):
df.to_excel(filepath, sheet_name=sheetname, index=index)
# Otherwise, add a sheet. Overwrite if there exists one with the same name.
else:
with pd.ExcelWriter(filepath, engine='openpyxl', if_sheet_exists='replace', mode='a') as writer:
df.to_excel(writer, sheet_name=sheetname, index=index)
如果要加空sheet
xw = pd.ExcelWriter(file_path, engine='xlsxwriter')
pd.DataFrame().to_excel(xw, 'sheet11')
如果你变空了sheet
sheet = xw.sheets['sheet11']