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)