1

ディレクトリから Excel ワークブックを開き、最初のワークシートの名前を変更して、最初のワークシートと後続のワークシートでストアド プロシージャを実行することになっているこの python スクリプトがあります。スクリプトを実行するとエラーが表示されます - 'str' オブジェクト属性 'title' は読み取り専用です。ヘルプや提案をいただければ幸いです。

import os
import pyodbc
import openpyxl
from openpyxl import load_workbook


dirList = os.listdir("""\\Raw_Data\\HSRx""")

#database connection
#loop through excel workbooks
#loop through excel sheets in each workbook
#run stored proc on each worksheet
#close files and disconnect to sql server
conn = pyodbc.connect('DRIVER={SQLServer};SERVER=localhost;DATABASE=mydb;UID=myname;PWD=mypwd')
cursor = conn.cursor()

for n in dirList:
    path =os.path.join("""\\Raw_Data\\HSRx""",n)
    workbook = openpyxl.reader.excel.load_workbook(path)
    worksheets = workbook.get_sheet_names()
    sheet = ['None','None']
    i = 0
    print n
    for worksheet in worksheets:
        worksheet.title = "Sheetone"
        sheet[i] = "Sheetone"
        i += 1
        print worksheet
    cursor.execute("""exec SP_IMPORT_HSRx_Ins ?, ?, ?""",n,sheet[0],sheet[1])
    cursor.commit()


conn.close()   

トレースバックは次のとおりです。

CS NOV20 12.xlsx Traceback (most recent call): 
  File "HSRXRecons.py", line 25, in <module> worksheet.title = "Sheetone" 
AttributeError: 'str' object attribute 'title' is read-only 
4

1 に答える 1

3

worksheetget_sheet_names()文字列のリストを返すため、は文字列です。文字列に属性を割り当てることはできません。

>>> 'Sheet1'.title = 'Sheetone'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'str' object attribute 'title' is read-only

タイトルを変更するには、シート名をget_sheet_by_name次のように渡します。

workbook.get_sheet_by_name(worksheet).title = "Sheetone"
于 2012-12-07T17:44:19.813 に答える