#EXCELシート名取得、特定文字変更、シート各行各列リスト生成
import openpyxl
import pandas as pd
import os
import glob
import datetime as dt
import csv
#EXCELシート名を取得、シート名の特定文字を変更して保存、特定セルを読む
#import openpyxl
print("process start")
#キーワード検索リストが定義されたシートを含むエクセルの絶対パスの指定
path_xlsx_definition_word = "/Users/kabayon/Desktop/search_word_in_excel.xlsx"
#キーワード検索する対象エクセルの絶対パスの指定
path_xlsx_read = "/Users/kabayon/Desktop/Streamlit API reference.xlsx"
#検索キーワードシートからそのデータフレーム(row_list_word、word_target)とその数の取得
name_ws_word = "list_word_target"
column_word_target = "word_target"
df_word = pd.read_excel(path_xlsx_definition_word, sheet_name=name_ws_word)
list_word = df_word[column_word_target].to_list()
len_list_word = len(list_word)
#print(len_list_word,list_word)
#対象エクセルブックパス設定シートからそのデータフレーム(row_list_path、path_target)とその数の取得
name_ws_path_target = "list_path_target"
column_path_target = "path_target"
df_path_target = pd.read_excel(path_xlsx_definition_word, sheet_name=name_ws_path_target)
list_path_target= df_path_target[column_path_target].to_list()
len_list_path_target = len(list_path_target)
#print(len_list_path_target,list_path_target)
#パスリストからパスを一つずつ取り出して検索対象ブックを開き、そのブックのシート名を取得
lists_data = []
for path_target in list_path_target:
wb = openpyxl.load_workbook(path_target)
names_ws = wb.sheetnames
#len_names_ws = len(names_ws)
#print(len_names_ws,names_ws)
#シート名に不整な文字が含まれる場合の文字の置換え
for name_ws in names_ws:
ws = wb[name_ws]
newname_ws = name_ws.replace(",","_") #シート名中のコンマをアンダーバーに変更
newname_ws = newname_ws.replace(" ","_") #シート名中の半角スペースをアンダーバーに変更
newname_ws = newname_ws.replace(" ","_") #シート名中の全角スペースをアンダーバーに変更
ws.title = newname_ws
#シート名を成形したブックを上書き保存
wb.save(path_xlsx_read)
#修正したシート名を再取得(無修正でも読み込む)
names_ws = wb.sheetnames
#print(names_ws)
#対象ワークブックの各シートを順次開く
for name_ws in names_ws:
ws = wb[name_ws]
len_row_sheet = ws.max_row
len_column_sheet = ws.max_column
num_row = 0
for row in ws.iter_rows(max_row=len_row_sheet, max_col=len_column_sheet):
num_row += 1
num_column = 0
for cell in row:
num_column += 1
str_cell = str(cell.value).replace("\n","。").replace("\r","/").replace("\u2003","_").replace(" ","_").replace("\u3000","_")
for word in list_word:
if word in str_cell:
list_data = [path_target,name_ws,word,num_row,num_column,str_cell]
lists_data.append(list_data)
#print(path_target,name_ws,word,num_row,num_column,str_cell)
#for data in lists_data:
#print(data)
dir_file_output = "/Users/kabayon/Desktop"
name_header_output = "result_"
dt_now=dt.datetime.now().strftime("%Y%m%d%H%M%S")
ext_output = ".csv"
path_csv_output = dir_file_output + "/" + name_header_output + dt_now + ext_output
#path_csv_output = "/Users/kabayon/Desktop/result.csv"
with open(path_csv_output, 'w',newline="") as fo:
writer = csv.writer(fo)
writer.writerows(lists_data)
print("process end")