#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")