프로델에서 네신 Excel 작성을 자동화하고 싶다 #2
셀 내의 캐릭터 라인의 치환 ~ 그 2
#1 로 만든 코드에 손을 넣어 히나형에서 원하는 xlsx 파일을 출력하도록 합니다. #1에서 사용한 파일을 히나형으로 합니다.
캘린더 형식의 표로, 그림에서는 날짜 부분이 끊어져 있습니다만, 「//day1-3」과 같은 셀 위치를 나타내는 기호가 각각 들어 있습니다. xlsx 파일을 압축 해제하여 얻은 sharedStrings.xml에서 문자열 요소를 순차적으로 읽고, 그것이 기호라면 그 내용에 따라 문자열로 바꾸고 마지막으로 zip 압축 → 출력이라는 흐름입니다.
실제 코드
일단 움직이는 것을 하는 것으로 만들어 보았습니다. 히나형으로부터 2020년 4월의 예정표를 출력합니다.
xlsx 작업.rdr
ーー予定データ
見出しは、{title=「2020年4月 プレイルーム使用予定」,mon=「月」,tue=「火」,wed=「水」,thu=「木」,fri=「金」}
ーー構造体もどきを定義
予定一覧は、{
{日付=1,参加者=「渡部 石倉 伊藤」},{日付=2,参加者=「横尾 小笠原 西 横川」},{日付=3,参加者=「江原 松本 新田 千田」},
{日付=6,参加者=「富田 浅井 森山」},{日付=7,参加者=「原 中川 藤原 」},{日付=8,参加者=「片岡 柳原 福田 山口」},
{日付=9,参加者=「柴山 志村 須藤 」},{日付=10,参加者=「志村 星野 桑原 大井」},{日付=13,参加者=「原口 宮部 新垣」},
{日付=14,参加者=「平田 生田 浜崎 三村」},{日付=15,参加者=「菅井 進藤 八木 」},{日付=16,参加者=「細田 谷口 菅谷 坂口」},
{日付=17,参加者=「山野 藤井 水口 」},{日付=20,参加者=「佐竹 荻原 島津 西」},{日付=21,参加者=「水崎 竹下 大木 」},
{日付=22,参加者=「黒沢 梅田 竹下 諏訪」},{日付=23,参加者=「泉 鈴木 阪本 」},{日付=24,参加者=「志村 北野 一木 池内」},
{日付=27,参加者=「立石 川井」},{日付=28,参加者=「岡島 池上 成海 」},{日付=30,参加者=「上山 黒岩 森下 村上」}
}
臨時日付は、「2020/4/1 0:00」を日時形式化したもの
曜日一覧は、{「月曜日」,「火曜日」,「水曜日」,「木曜日」,「金曜日」,「土曜日」,「日曜日」}
臨時一覧は、曜日一覧から[臨時日付の曜日]を探したもの
曜日オフセットは、臨時一覧(1)-1
「[プログラムの位置]カレンダー原紙.xlsx」を「[プログラムの位置]\temp」へコピーする
「[プログラムの位置]\temp\カレンダー原紙.xlsx」を「[プログラムの位置]\temp\カレンダー原紙.zip」へ変更する
「[プログラムの位置]\temp\カレンダー原紙.zip」を「[プログラムの位置]\temp」へ解凍する
「[プログラムの位置]\temp\カレンダー原紙.zip」を削除する
文字列xmlは、「[プログラムの位置]temp\xl\sharedStrings.xml」をXMLとして開いたもの
文字セル一覧は、文字列xmlから「sst\si」を取得したもの
文字セル一覧を箱へそれぞれ繰り返す
臨時一覧は、箱の要素一覧
臨時一覧を器へそれぞれ繰り返す
もし器の名前が「t」かつ[器の内容が「//[[]A-Za-z[]]+」という正規表現に合致する]ならば
マッチ単語は、器の内容から「[[]A-Za-z[]]+」という正規表現で取り出したもの
マッチ数字は、器の内容から「[[]0-9[]]+」という正規表現で取り出したもの
もしマッチ単語(1)が「day」ならば
臨時は、[(マッチ数字(1)-1)*7+マッチ数字(2)-曜日オフセット]
もし臨時>0ならば
器の内容を、臨時に変える
そうでないなら
器の内容を、「」に変える
もし終わり
他でもしマッチ単語(1)が「member」ならば
臨時は、[(マッチ数字(1)-1)*7+マッチ数字(2)-曜日オフセット]
該当なし=1
[予定一覧の個数]回、値にカウントしながら繰り返す
もし、臨時=[予定一覧(値)の「日付」]なら
該当なし=0
繰り返しから抜ける
もし終わり
繰り返し終わり
もし該当なし=0なら
器の内容を、予定一覧(値)の「参加者」に変える
そうでないなら
器の内容を、「」に変える
もし終わり
そうでないなら
器の内容を、[見出しからマッチ単語(1)を得たもの]に変える
もし終わり
もし終わり
繰り返し終わり
繰り返し終わり
「[プログラムの位置]temp\xl\sharedStrings.xml」に文字列xmlを保存する
「[プログラムの位置]\temp\_rels」を「[プログラムの位置]\temp\カレンダー原紙.zip」へ圧縮する
「[プログラムの位置]\temp\docProps」を「[プログラムの位置]\temp\カレンダー原紙.zip」へ圧縮する
「[プログラムの位置]\temp\xl」を「[プログラムの位置]\temp\カレンダー原紙.zip」へ圧縮する
「[プログラムの位置]\temp\[[]Content_Types[]].xml」を「[プログラムの位置]\temp\カレンダー原紙.zip」へ圧縮する
「[プログラムの位置]\temp\カレンダー原紙.zip」を「[プログラムの位置]\temp\カレンダー原紙.xlsx」へ変更する
히나형 파일(캘린더 원지.xlsx)을 코드 파일과 같은 폴더에 두고 실행시키면 temp 폴더에 히나형과 같은 이름의 파일이 출력됩니다.
잘 대체 된 것 같습니다.
Reference
이 문제에 관하여(프로델에서 네신 Excel 작성을 자동화하고 싶다 #2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shukvaal/items/ddaadaa191c5e199712b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)