from openpyxl import Workbook,load_workbook from pprint import pprint import os, tkinter, tkinter.filedialog, tkinter.messagebox from os import path def getfile(): # ファイル選択ダイアログ root = tkinter.Tk() root.withdraw() fTyp = [("","*")] iDir = os.path.abspath(os.path.dirname(__file__)) file = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir) return file #open&read #ファイルオープンからセルデータの読み込み a = getfile()#ファイル選択 wb=load_workbook(a) #ワークブック(複数シート前提)開く print(len(wb.sheetnames)) #ワークシートの枚数を数える for name in wb.get_sheet_names(): print(name)#シート名を書き出す print('-'*32 ) #データの読み込み--------------------------------------- ws=wb.active x_max=ws.max_column#最大列数 y_max=ws.max_row#最大行数 print(' 列数は{}、行数は{}'.format(x_max,y_max)) list = [[0 for i in range(ws.max_column)]for j in range(ws.max_row)] for x in range(0, ws.max_row): for y in range(0, ws.max_column): list[x][y] = ws.cell(row=x+1, column=y+1).value pprint (list) ''' #データに何が入っているかわからないのでcell 1個ずつ読み込む for row in ws: for cell in row: print(cell.value,end=",") print('\n') ''' #writeファイル新規書き込み book = Workbook() sheet = book.active ''' データ投入例 #エクセルレンジ指定の書き込み #.valueを指定 sheet['A1'].value='test' sheet['A2']=12 sheet['A3']=13 sheet['B2']='B2' sheet['C3']='tensuketen' sheet['D4']=11 #cells行列形式のセル指定の書き込み sheet.cell(row=4,column=5,value=10) ''' #読み込んだデータをファイル名を付けてエクセルで書き込み #行列に連続して書き込み for i in range(1,y_max+1):#エクセルは1から始まるので(1to max+1)が範囲になる for n in range(1,x_max+1): sheet.cell(row=i, column=n, value=list[i-1][n-1])#データは0からなので-1 とする #book保存 #book.save(" sample. xlsx") filename=input('output filename?(.xslx)') b = path.join(path.dirname(__file__), filename+'.xlsx') book.save(b)
コメント