From e93c6c78f8261dd017716eb39e33522e855baa08 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 19 Sep 2023 21:15:32 +0900 Subject: [PATCH 1/9] =?UTF-8?q?fix:=20=E7=94=9F=E7=89=A9=E7=94=B1=E6=9D=A5?= =?UTF-8?q?Excel=E5=87=BA=E5=8A=9B=E3=81=A7=E3=80=81=E4=BB=A5=E4=B8=8B?= =?UTF-8?q?=E3=81=AE=E4=BF=AE=E6=AD=A3=E5=AF=BE=E5=BF=9C=E3=82=92=E5=AE=9F?= =?UTF-8?q?=E6=96=BD=20=E3=83=BBVeeva=E5=8D=B8=E3=82=B3=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=80=81Veeva=E5=8D=B8=E7=B5=84=E7=B9=94=E3=82=B3=E3=83=BC?= =?UTF-8?q?=E3=83=89=E3=80=81Veeva=E5=8F=96=E5=BC=95=E5=8C=BA=E5=88=86?= =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E3=81=8C=E6=95=B0=E5=80=A4=E5=9E=8B?= =?UTF-8?q?=E3=81=A7=E5=87=BA=E5=8A=9B=E3=81=95=E3=82=8C=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=82=92=E3=80=81=E6=96=87=E5=AD=97=E5=88=97?= =?UTF-8?q?=E5=9E=8B=E3=81=AB=E5=A4=89=E6=8F=9B=20=E3=83=BB=E5=87=BA?= =?UTF-8?q?=E5=8A=9B=E3=81=97=E3=81=9FExcel=E3=81=AB=E7=BD=AB=E7=B7=9A?= =?UTF-8?q?=E3=82=92=E5=BC=95=E3=81=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repositories/bio_sales_lot_repository.py | 6 +++--- .../src/services/bio_view_service.py | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py b/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py index 10c7cba3..ef10aa32 100644 --- a/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py +++ b/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py @@ -45,10 +45,10 @@ class BioSalesLotRepository(BaseRepository): inst_name_form, address, tel_num, - v_whs_cd, - v_whsorg_cd, + CAST(v_whs_cd AS CHAR) AS v_whs_cd, + CAST(v_whsorg_cd AS CHAR) AS v_whsorg_cd, whs_org_name, - v_tran_cd, + CAST(v_tran_cd AS CHAR) AS v_tran_cd, iko_flg FROM src05.bio_sales_lot diff --git a/ecs/jskult-webapp/src/services/bio_view_service.py b/ecs/jskult-webapp/src/services/bio_view_service.py index cf9961ac..45b80162 100644 --- a/ecs/jskult-webapp/src/services/bio_view_service.py +++ b/ecs/jskult-webapp/src/services/bio_view_service.py @@ -5,6 +5,7 @@ import shutil from datetime import datetime import pandas as pd +from openpyxl.styles.borders import Border, Side from src.aws.aws_api_client import AWSAPIClient from src.aws.s3 import S3Client @@ -155,9 +156,20 @@ class BioViewService(BaseService): data_frame_chunk_size = 2000 # 各部分データフレームのサイズ is_first = True # ループの初回 data_frame_range = len(data_frame) + side = Side(style='thin', color='000000') + border = Border(top=side, bottom=side, left=side, right=side) + # 出力したExcelに罫線を引く + workbook = writer.book + sheet = workbook['Sheet1'] + for row in sheet[f'A1:AK{i + data_frame_chunk_size}']: + for cell in row: + cell.border = border + + # 指定行数ごとにデータを分割して処理 for i in range(0, data_frame_range, data_frame_chunk_size): chunk_df = data_frame.iloc[i:i + data_frame_chunk_size] + start_row = i + 1 # 1回目の分割では、ヘッダ部分を上書きしないようにする if is_first: @@ -166,6 +178,13 @@ class BioViewService(BaseService): await loop.run_in_executor(None, functools.partial( chunk_df.to_excel, writer, header=False, index=False, startrow=start_row, startcol=0)) + # workbook = writer.book + # sheet = workbook['Sheet1'] + # side = Side(style='thin', color='000000') + # border = Border(top=side, bottom=side, left=side, right=side) + # for row in sheet[f'A1:AK{data_frame_range + 1}']: + # for cell in row: + # cell.border = border return output_file_path From d33519f83d84bc36657c4dfdd4cbba19e93e6385 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 19 Sep 2023 22:32:58 +0900 Subject: [PATCH 2/9] =?UTF-8?q?fix:=20Excel=E6=9B=B8=E3=81=8D=E5=87=BA?= =?UTF-8?q?=E3=81=97=E3=81=AB=E5=A4=B1=E6=95=97=E3=81=97=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=9F=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/services/bio_view_service.py | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/ecs/jskult-webapp/src/services/bio_view_service.py b/ecs/jskult-webapp/src/services/bio_view_service.py index 45b80162..3b320114 100644 --- a/ecs/jskult-webapp/src/services/bio_view_service.py +++ b/ecs/jskult-webapp/src/services/bio_view_service.py @@ -158,14 +158,13 @@ class BioViewService(BaseService): data_frame_range = len(data_frame) side = Side(style='thin', color='000000') border = Border(top=side, bottom=side, left=side, right=side) - # 出力したExcelに罫線を引く + # Excelに罫線を引く workbook = writer.book sheet = workbook['Sheet1'] - for row in sheet[f'A1:AK{i + data_frame_chunk_size}']: + for row in sheet[f'A1:AK{data_frame_chunk_size + 1}']: for cell in row: cell.border = border - # 指定行数ごとにデータを分割して処理 for i in range(0, data_frame_range, data_frame_chunk_size): chunk_df = data_frame.iloc[i:i + data_frame_chunk_size] @@ -178,13 +177,6 @@ class BioViewService(BaseService): await loop.run_in_executor(None, functools.partial( chunk_df.to_excel, writer, header=False, index=False, startrow=start_row, startcol=0)) - # workbook = writer.book - # sheet = workbook['Sheet1'] - # side = Side(style='thin', color='000000') - # border = Border(top=side, bottom=side, left=side, right=side) - # for row in sheet[f'A1:AK{data_frame_range + 1}']: - # for cell in row: - # cell.border = border return output_file_path From 1a8bf7f3bac9dc86f4b25e39530d6de7c9d7322e Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 19 Sep 2023 22:44:31 +0900 Subject: [PATCH 3/9] =?UTF-8?q?fix:=20=E7=BD=AB=E7=B7=9A=E3=81=8C=E9=80=94?= =?UTF-8?q?=E4=B8=AD=E3=81=A7=E5=88=87=E3=82=8C=E3=81=A6=E3=81=84=E3=81=9F?= =?UTF-8?q?=E3=81=AE=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/services/bio_view_service.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ecs/jskult-webapp/src/services/bio_view_service.py b/ecs/jskult-webapp/src/services/bio_view_service.py index 3b320114..719e90d4 100644 --- a/ecs/jskult-webapp/src/services/bio_view_service.py +++ b/ecs/jskult-webapp/src/services/bio_view_service.py @@ -153,18 +153,18 @@ class BioViewService(BaseService): # DF内のヘッダと連番を書き込みたくない場合、`header`と`index`をFalseに指定する。 # `startrow`と`startcol`で、Excelの書き込み位置を決定する。省略した場合はA1セルから書く。 - data_frame_chunk_size = 2000 # 各部分データフレームのサイズ - is_first = True # ループの初回 data_frame_range = len(data_frame) - side = Side(style='thin', color='000000') - border = Border(top=side, bottom=side, left=side, right=side) # Excelに罫線を引く workbook = writer.book sheet = workbook['Sheet1'] - for row in sheet[f'A1:AK{data_frame_chunk_size + 1}']: + side = Side(style='thin', color='000000') + border = Border(top=side, bottom=side, left=side, right=side) + for row in sheet[f'A1:AK{data_frame_range + 1}']: for cell in row: cell.border = border + data_frame_chunk_size = 2000 # 1回あたりの書き出し行数 + is_first = True # ループの初回 # 指定行数ごとにデータを分割して処理 for i in range(0, data_frame_range, data_frame_chunk_size): chunk_df = data_frame.iloc[i:i + data_frame_chunk_size] From 87f89621a9f3da55a6903cb424a41bbe3e7e1271 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 20 Sep 2023 00:20:56 +0900 Subject: [PATCH 4/9] =?UTF-8?q?fix:=20JSON=E3=81=A7=E8=A8=B1=E5=8F=AF?= =?UTF-8?q?=E3=81=95=E3=82=8C=E3=81=AA=E3=81=84Unicode=E5=88=B6=E5=BE=A1?= =?UTF-8?q?=E6=96=87=E5=AD=97=E5=88=97=E3=82=92=E3=83=95=E3=83=AD=E3=83=B3?= =?UTF-8?q?=E3=83=88=E5=81=B4=E3=81=A7=E5=A4=89=E6=8F=9B=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/templates/bioSearchList.html | 3 ++- ecs/jskult-webapp/src/templates/docSearch.html | 3 ++- ecs/jskult-webapp/src/templates/instSearch.html | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ecs/jskult-webapp/src/templates/bioSearchList.html b/ecs/jskult-webapp/src/templates/bioSearchList.html index f0d47570..64fa09b5 100644 --- a/ecs/jskult-webapp/src/templates/bioSearchList.html +++ b/ecs/jskult-webapp/src/templates/bioSearchList.html @@ -370,7 +370,8 @@ // {% autoescape False%} // ジェネレータですこしずつ取得してリストに詰める // {% for bio_data_json_str in bio.bio_data_json_str() %} - searchResultData.push(...JSON.parse('{{bio_data_json_str}}')) + // unicode制御文字をエスケープしてからJSON.parseする + searchResultData.push(...JSON.parse('{{bio_data_json_str}}'.replace(/[\u0000-\u001F]+/g, " "))) // {% endfor %} // {% endautoescape%} // {% endif %} diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html index c9e30752..6d50f29b 100644 --- a/ecs/jskult-webapp/src/templates/docSearch.html +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -273,7 +273,8 @@ // {% autoescape False%} // ジェネレータですこしずつ取得してリストに詰める // {% for ultmarc_data_json_str in ultmarc.ultmarc_data_json_str() %} - searchResultData.push(...JSON.parse('{{ultmarc_data_json_str}}')) + // unicode制御文字をエスケープしてからJSON.parseする + searchResultData.push(...JSON.parse('{{ultmarc_data_json_str}}'.replace(/[\u0000-\u001F]+/g, " "))) // {% endfor %} // {% endautoescape%} // {% endif %} diff --git a/ecs/jskult-webapp/src/templates/instSearch.html b/ecs/jskult-webapp/src/templates/instSearch.html index d977dcae..2bb81667 100644 --- a/ecs/jskult-webapp/src/templates/instSearch.html +++ b/ecs/jskult-webapp/src/templates/instSearch.html @@ -257,7 +257,8 @@ // {% autoescape False%} // ジェネレータですこしずつ取得してリストに詰める // {% for ultmarc_data_json_str in ultmarc.ultmarc_data_json_str() %} - searchResultData.push(...JSON.parse('{{ultmarc_data_json_str}}')) + // unicode制御文字をエスケープしてからJSON.parseする + searchResultData.push(...JSON.parse('{{ultmarc_data_json_str}}'.replace(/[\u0000-\u001F]+/g, " "))) // {% endfor %} // {% endautoescape%} // {% endif %} From 714575c624cece041dd2e4e6a0c1ca57809b8315 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 20 Sep 2023 11:11:19 +0900 Subject: [PATCH 5/9] =?UTF-8?q?style:=20CAST=E3=81=97=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=82=8B=E7=90=86=E7=94=B1=E3=82=92=E3=82=B3=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E3=81=A7=E8=BF=BD=E8=A8=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py b/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py index ef10aa32..9a83be99 100644 --- a/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py +++ b/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py @@ -45,6 +45,7 @@ class BioSalesLotRepository(BaseRepository): inst_name_form, address, tel_num, + -- Excel出力のため、数値型のコード値を文字列として取得(Veeva卸コード、Veeva卸組織コード、Veeva取引区分コード) CAST(v_whs_cd AS CHAR) AS v_whs_cd, CAST(v_whsorg_cd AS CHAR) AS v_whsorg_cd, whs_org_name, From 088136d76c750d781e6eadfc25d6edc693c5ebc5 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 20 Sep 2023 15:08:50 +0900 Subject: [PATCH 6/9] =?UTF-8?q?feat:=20=E3=82=A8=E3=82=B9=E3=82=B1?= =?UTF-8?q?=E3=83=BC=E3=83=97=E3=82=92=E3=82=B7=E3=83=B3=E3=83=97=E3=83=AB?= =?UTF-8?q?=E3=81=AB=E3=81=99=E3=82=8B=E3=81=9F=E3=82=81=E3=81=AB=E3=80=81?= =?UTF-8?q?=E3=83=90=E3=83=83=E3=82=AF=E3=82=AF=E3=82=A9=E3=83=BC=E3=83=88?= =?UTF-8?q?=E3=81=A7=E5=9B=B2=E3=82=80=E3=82=88=E3=81=86=E3=81=AB=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/model/view/bio_view_model.py | 6 +++--- .../src/model/view/ultmarc_doctor_search_view_model.py | 6 +++--- .../src/model/view/ultmarc_inst_search_view_model.py | 6 +++--- ecs/jskult-webapp/src/templates/bioSearchList.html | 2 +- ecs/jskult-webapp/src/templates/docSearch.html | 2 +- ecs/jskult-webapp/src/templates/instSearch.html | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ecs/jskult-webapp/src/model/view/bio_view_model.py b/ecs/jskult-webapp/src/model/view/bio_view_model.py index 7ad9e8cb..e5731c2d 100644 --- a/ecs/jskult-webapp/src/model/view/bio_view_model.py +++ b/ecs/jskult-webapp/src/model/view/bio_view_model.py @@ -62,9 +62,9 @@ class BioViewModel(BaseModel): part_size = 500 for i in range(0, search_data_len, part_size): json_str = json.dumps(search_data_list[i:i + part_size], ensure_ascii=False, default=date_handler) - # JavaScriptに埋め込むため、クォートをエスケープ - json_str = json_str.replace("'", "\\'") - json_str = json_str.replace('\\"', '\\\\"') + # JavaScriptに埋め込むため、バックスラッシュ、バッククォートをエスケープ + json_str = json_str.replace('\\', '\\\\') + json_str = json_str.replace("`", "\\`") yield json_str def make_whs_name(self): diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_search_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_search_view_model.py index cecfd77d..a3bfdd49 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_doctor_search_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_doctor_search_view_model.py @@ -28,9 +28,9 @@ class UltmarcDoctorSearchViewModel(BaseModel): part_size = 50 for i in range(0, search_data_len, part_size): json_str = json.dumps(search_data_list[i:i + part_size], ensure_ascii=False, default=date_handler) - # JavaScriptに埋め込むため、クォートをエスケープ - json_str = json_str.replace("'", "\\'") - json_str = json_str.replace('\\"', '\\\\"') + # JavaScriptに埋め込むため、バックスラッシュ、バッククォートをエスケープ + json_str = json_str.replace('\\', '\\\\') + json_str = json_str.replace("`", "\\`") yield json_str # ページネーションのページ番号 diff --git a/ecs/jskult-webapp/src/model/view/ultmarc_inst_search_view_model.py b/ecs/jskult-webapp/src/model/view/ultmarc_inst_search_view_model.py index 2a5a0dd5..c8317400 100644 --- a/ecs/jskult-webapp/src/model/view/ultmarc_inst_search_view_model.py +++ b/ecs/jskult-webapp/src/model/view/ultmarc_inst_search_view_model.py @@ -30,9 +30,9 @@ class UltmarcInstSearchViewModel(BaseModel): part_size = 50 for i in range(0, search_data_len, part_size): json_str = json.dumps(search_data_list[i:i + part_size], ensure_ascii=False, default=date_handler) - # JavaScriptに埋め込むため、クォートをエスケープ - json_str = json_str.replace("'", "\\'") - json_str = json_str.replace('\\"', '\\\\"') + # JavaScriptに埋め込むため、バックスラッシュ、バッククォートをエスケープ + json_str = json_str.replace('\\', '\\\\') + json_str = json_str.replace("`", "\\`") yield json_str # ページネーションのページ番号 diff --git a/ecs/jskult-webapp/src/templates/bioSearchList.html b/ecs/jskult-webapp/src/templates/bioSearchList.html index 64fa09b5..c978a9df 100644 --- a/ecs/jskult-webapp/src/templates/bioSearchList.html +++ b/ecs/jskult-webapp/src/templates/bioSearchList.html @@ -371,7 +371,7 @@ // ジェネレータですこしずつ取得してリストに詰める // {% for bio_data_json_str in bio.bio_data_json_str() %} // unicode制御文字をエスケープしてからJSON.parseする - searchResultData.push(...JSON.parse('{{bio_data_json_str}}'.replace(/[\u0000-\u001F]+/g, " "))) + searchResultData.push(...JSON.parse(`{{bio_data_json_str}}`.replace(/[\u0000-\u001F]+/g, " "))) // {% endfor %} // {% endautoescape%} // {% endif %} diff --git a/ecs/jskult-webapp/src/templates/docSearch.html b/ecs/jskult-webapp/src/templates/docSearch.html index 6d50f29b..c8bd7609 100644 --- a/ecs/jskult-webapp/src/templates/docSearch.html +++ b/ecs/jskult-webapp/src/templates/docSearch.html @@ -274,7 +274,7 @@ // ジェネレータですこしずつ取得してリストに詰める // {% for ultmarc_data_json_str in ultmarc.ultmarc_data_json_str() %} // unicode制御文字をエスケープしてからJSON.parseする - searchResultData.push(...JSON.parse('{{ultmarc_data_json_str}}'.replace(/[\u0000-\u001F]+/g, " "))) + searchResultData.push(...JSON.parse(`{{ultmarc_data_json_str}}`.replace(/[\u0000-\u001F]+/g, " "))) // {% endfor %} // {% endautoescape%} // {% endif %} diff --git a/ecs/jskult-webapp/src/templates/instSearch.html b/ecs/jskult-webapp/src/templates/instSearch.html index 2bb81667..92f08e10 100644 --- a/ecs/jskult-webapp/src/templates/instSearch.html +++ b/ecs/jskult-webapp/src/templates/instSearch.html @@ -258,7 +258,7 @@ // ジェネレータですこしずつ取得してリストに詰める // {% for ultmarc_data_json_str in ultmarc.ultmarc_data_json_str() %} // unicode制御文字をエスケープしてからJSON.parseする - searchResultData.push(...JSON.parse('{{ultmarc_data_json_str}}'.replace(/[\u0000-\u001F]+/g, " "))) + searchResultData.push(...JSON.parse(`{{ultmarc_data_json_str}}`.replace(/[\u0000-\u001F]+/g, " "))) // {% endfor %} // {% endautoescape%} // {% endif %} From 12744406cf9ba7061b743dee213749abe94a307a Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 20 Sep 2023 16:22:21 +0900 Subject: [PATCH 7/9] =?UTF-8?q?feat:=20Excel=E3=81=AE=E7=BD=AB=E7=B7=9A?= =?UTF-8?q?=E3=82=92=E5=BC=95=E3=81=8F=E5=87=A6=E7=90=86=E3=82=92=E9=AB=98?= =?UTF-8?q?=E9=80=9F=E5=8C=96=E3=80=82=E8=A8=AD=E5=AE=9A=E6=B8=88=E3=81=BF?= =?UTF-8?q?=E3=81=AE=E6=9B=B8=E5=BC=8F=E3=82=92=E5=8F=8D=E6=98=A0=E3=81=95?= =?UTF-8?q?=E3=81=9B=E3=81=A6=E3=81=84=E3=81=8F=E6=96=B9=E5=BC=8F=E3=81=AB?= =?UTF-8?q?=E3=81=97=E3=81=9F=E3=80=82template=E3=81=AEExcel=E3=81=AEA2?= =?UTF-8?q?=E3=82=BB=E3=83=AB=E3=81=AB=E4=BA=88=E3=82=81=E8=A8=AD=E5=AE=9A?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/data/BioData_template.xlsx | Bin 10423 -> 10529 bytes .../src/services/bio_view_service.py | 9 ++++----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/ecs/jskult-webapp/src/data/BioData_template.xlsx b/ecs/jskult-webapp/src/data/BioData_template.xlsx index ec1575a2932f20bd823620b1001e6192ca7f420b..c548d30828ed6f81555c9211fc37a14aedde2297 100644 GIT binary patch delta 4053 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 Yq8DIh0$zCv08n4`_A3)DzQ1Pw0NHz0L;wH) delta 3876 zcmZ8k2T&8t)(xRZs3DXfqO^o2p@!BpN|X-L1O<$MfCAE@bfid;A}ti@ z3euY(O+xQT=p6(e&Oh^g|9iVLJ9lT!-krU7@0@$m^(u9XXJ|lLH-*dcfdGIA;R**B)y}4J~c`U*Vl{yhJV3{vbrVAOd?s=sRXQZyKK{8+M5E%1IL5i&SjJ3 z!3VkQK!BZIvZ*P&-o>~_!#={G8E%Z{z{CwS>Ph(N+i6J?+?_icnFD$EG(=&}ERd5c z4CThOEv=!0@VE-Z)dJ1%E zFLbds^oHGaV84A?3~EE^_0Xg%{pN-TAKeQQ2HKZ*q^=Q{3;Y3u$YA<&2(9#lop6$eW#Q;+bh&G}}rd`hh}Mpj9BnWogJq`ld0bVKCM3&0WRCoBCn z^FtPqZqzes4F{7ZwoEsu@%=!gWu{oVySu7WguPj&_q#4k;V*l^!%^Id0>kZVvt3=M z@rGu`F5QdZsDwVpSX~Vpi82f`{jBl;CLt`4+26LkV%;SWnC#gvvejWvwf=L{tF7aP z-%DL?KXG zPAfj6yt{JQ>xW1L@9>3e9*>{*(NP2Zq@Uh&6_JYzNEI8Or%W|!URQaCeA2(bN5?=3 zxt^hQ8#r))Y2-M~a@Bmb)a0A4g|zZp;MKi)*OD%O>6>dcfjW=~)6j>mT$Ra!8{W>| z&F%PGd3JfI!h~o?5xVKo8z#VUQun?1TL*7yRJ5i0GfR%c`vPuGHw|!eNAYrB7pfLl z{&Rsq0b(Q0&`1M8ibXkx4AcNXFTn@Gk9SFuWD8ywT2+B$7XqjbqqG9PY_49eI@$nabiWM-s1zyQXv}{~vX(>|2sxeD$tq$4NRf~+i_|oXS z$26ygq&w^EHV(+#LP$*ZGd=0PG^}NMwryLt+PgmlG3FaCnpZQtn;8lou75Z8DX&iE zH}) z55B!#gwmt8Tx-{W8gfSEgj+1gZV|clD8G*vK#Vj@!d$WPQr!z zCmasMt3S98eJ1BNrJxu~n9aFv74aO3*)$g1m9!Z)iygWRL7{|@boI(5 z)Q@|Dupdfe+sHiSrC)B2w@Q1P4wuOl{C89PK>r`8FOD}V z7@etF2AJ+DT$EWdy_1%|hqE=3bmq_}5nUj-?}i*?d*-1}`eUyQId>VGXeJ^Qbeg0w z7t};gx0ucqC!o7Z*H;FJ;oI6DLUT^t8U_KhgEplKt}Hqh>|ky9tE z*wmr7+{S4=fY!XcndjBk=@C5+~-c6R|SWk8f^emYS|owhxUb*K&_gypsiTVT25ov`Q{&? z4iakEF>hC^=FiX^>{zrFc=rSN(-Ddm=QqZ(TvrRM)<#YtKcdk)`>f_JY8+#~9l0 zegag#>wO^UYpoFs&&~J;QlcOFSG(U%TNC2b*$)GM%E!H8*%D2#d{y5OOzZz%Q|h)Q z+?tI*;J64;?y_93iBegttr4#AS%2bwN=fYEh`)fB*<{lzIS&bn0RUh;kBYaWguBNx z$4Bns-cF9S*l}l)3|l=0T*@$4^xOgnX2m+xiqZ@i1EgB_H7W50D z@Clq?yHrd;8C-ks<-`K}Q}nOsv26dvvT_NSp2Fl|k3{d>Gcz|2)%TC}V6qAz$qatN zO+0HS)tN`abCvKiK7OGGbcs`pg9nE@Bp1O^N7*`KU3)N!Hf8F))JnGUE4Za^nIIMrYWcXW2QT-uP*tmUv?!_r#Le@xoo z4I78;@r$baDnlS)LJQEVCsf((d2X9v_)HUZ*_>FVzu5=RCRv`*hM@aoJbJu$+Dn*( zma|%;z=~&fq=U$MLO{muA&*8oyd}V>WWGb`?E_OpKd11!Wta_4gnC-$=2M87y6u%8 zLJ$TK3)UUhszp<{>E#O;S*3^`e;~@Y^%(W0r7gs1jElaoQ+N?N)Rr3Na~5P_Z^o

W z-j?m@5oN9IFvt-X-vjk#bCnj7hg()?YV5;@Qh8>-D$jWsGkwgIiED&P_gemX>yFC1p#0p}@ z%koPw6IW5aEOF7_-Q^+8Q6sU6*XQV;=jLJ1$w%~cM!wA42VrvU5E;Y4B%6t(9HdLF zY;A5nnf{e+vKd6l8b+C)Ec3JumXkm0n~Gz}8Z33=h|LT_Gj$rt)6WOFQA}J|MELVu3%y6hWi0}%KsmAkTN%-c-t z$IJ#MLy0u@AUgYEPLWjCqefL)&p(T(NJlA$z|Y$9PGn~XhZ`>ijs+8=N3M4lB<#z? z;I(?SCj6F+y5Fvr>Y+M$kDCkmHnI=5_$S`adzD$vf;%}DBd+@Tj|p` z@RHbP@!+%%(UIFo7o*lpa$y`XFuB(#nckch>-&2srOQi~;q7zlxrWeY1sk7dB{fzx z0jr>%3bs`04)E!|`m1vKRd84$mXLb?l;Ur)K*P!Qx3bQ2Bt|Ub<)ye7Q{sFsHiGwo zei!_GG;bmT8q+x0w89t|39EdU@z*?$pPg+kwh9c+7Z%2FsFY1SvQpAe4d^)-t9BA} zMn3FSdIN)e;TBz&Wc3N3(QClxV80lt}UW>XqK)iRha zhc$B5ZY|WS-Q7~SCjncdHH$dBFHIB5=i1kQ7Q8Uw;k)Tfbm274@4csgA5ZzcasW9* z#p8FYJuc-Nrad<|-udl4fNHg+;0oZS3@id+a(zw( zvMO-?v;G{_a&bP3o=EBX@5VaA3UfN1e4UUnj_t({!)p5y zYr(xmi%{Z@N{6;muE^n5_bzJ;h@FVLA`c{J3chCiM-I{e0L+AGK{kS-5I12!kPBD< zB5VkXasSh9LjVBIa}xb`OwtoxLbwPF!lFPv7J{rWocn(X_g`!?lu#+eb6&k%!1PN5 zJ_Zg#m=M_HpBg^bqb&b|&n@z0008G=t>fnM#9hML#qH5w%GS}K03rZv02%=8IfM`J y&-Xg#c<_H6uP0Oq3lPkNxey5g|KE|PyN8R@|GA<*e=q<*e?GsR-#!KZyZaCCvl^cO diff --git a/ecs/jskult-webapp/src/services/bio_view_service.py b/ecs/jskult-webapp/src/services/bio_view_service.py index 719e90d4..28a96621 100644 --- a/ecs/jskult-webapp/src/services/bio_view_service.py +++ b/ecs/jskult-webapp/src/services/bio_view_service.py @@ -5,7 +5,6 @@ import shutil from datetime import datetime import pandas as pd -from openpyxl.styles.borders import Border, Side from src.aws.aws_api_client import AWSAPIClient from src.aws.s3 import S3Client @@ -157,11 +156,11 @@ class BioViewService(BaseService): # Excelに罫線を引く workbook = writer.book sheet = workbook['Sheet1'] - side = Side(style='thin', color='000000') - border = Border(top=side, bottom=side, left=side, right=side) - for row in sheet[f'A1:AK{data_frame_range + 1}']: + # A2セルに罫線の書式を設定しておき、同じ書式を設定する + formatted_cell = sheet['A2'] + for row in sheet[f'A2:AK{data_frame_range + 1}']: for cell in row: - cell.border = border + cell._style = formatted_cell._style data_frame_chunk_size = 2000 # 1回あたりの書き出し行数 is_first = True # ループの初回 From dbc9ac9f6da67681e611ffd0d9736ca4adf68540 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Wed, 20 Sep 2023 18:49:02 +0900 Subject: [PATCH 8/9] =?UTF-8?q?fix:=20=E5=87=BA=E5=8A=9B=E3=83=87=E3=83=BC?= =?UTF-8?q?=E3=82=BF=E3=81=AE=E5=BD=A2=E5=BC=8F=E3=81=8C=E3=81=8A=E3=81=8B?= =?UTF-8?q?=E3=81=97=E3=81=8F=E3=81=AA=E3=82=8B=E3=81=9F=E3=82=81=E3=80=81?= =?UTF-8?q?=E6=9B=B8=E5=BC=8F=E3=81=AF=E3=82=B3=E3=83=94=E3=83=BC=E3=81=97?= =?UTF-8?q?=E3=80=81=E5=85=83=E3=81=AE=E6=9B=B8=E5=BC=8F=E3=81=AF=E6=96=87?= =?UTF-8?q?=E5=AD=97=E5=88=97=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8F=E6=A8=99?= =?UTF-8?q?=E6=BA=96=E3=81=AB=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/data/BioData_template.xlsx | Bin 10529 -> 10525 bytes .../src/services/bio_view_service.py | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ecs/jskult-webapp/src/data/BioData_template.xlsx b/ecs/jskult-webapp/src/data/BioData_template.xlsx index c548d30828ed6f81555c9211fc37a14aedde2297..4d5717acd6b45484ea41e9fb6d64de02f3879146 100644 GIT binary patch delta 2672 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 E0Q@rcegFUf diff --git a/ecs/jskult-webapp/src/services/bio_view_service.py b/ecs/jskult-webapp/src/services/bio_view_service.py index 28a96621..88d28b50 100644 --- a/ecs/jskult-webapp/src/services/bio_view_service.py +++ b/ecs/jskult-webapp/src/services/bio_view_service.py @@ -2,6 +2,7 @@ import asyncio import functools import os import shutil +from copy import copy from datetime import datetime import pandas as pd @@ -160,7 +161,7 @@ class BioViewService(BaseService): formatted_cell = sheet['A2'] for row in sheet[f'A2:AK{data_frame_range + 1}']: for cell in row: - cell._style = formatted_cell._style + cell._style = copy(formatted_cell._style) data_frame_chunk_size = 2000 # 1回あたりの書き出し行数 is_first = True # ループの初回 From 39398b68633117dfed02f8a9ad354f788862bd41 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 25 Sep 2023 11:34:14 +0900 Subject: [PATCH 9/9] =?UTF-8?q?feat:=20Excel=E3=81=AE=E7=BD=AB=E7=B7=9A?= =?UTF-8?q?=E3=82=92=E5=BC=95=E3=81=8B=E3=81=AA=E3=81=84=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/data/BioData_template.xlsx | Bin 10525 -> 10519 bytes .../src/services/bio_view_service.py | 10 ---------- 2 files changed, 10 deletions(-) diff --git a/ecs/jskult-webapp/src/data/BioData_template.xlsx b/ecs/jskult-webapp/src/data/BioData_template.xlsx index 4d5717acd6b45484ea41e9fb6d64de02f3879146..3b9fb03aa1f154de5b9f2cb5c9b8ba794cd41bb3 100644 GIT binary patch delta 3418 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 delta 3402 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 diff --git a/ecs/jskult-webapp/src/services/bio_view_service.py b/ecs/jskult-webapp/src/services/bio_view_service.py index 88d28b50..553ab359 100644 --- a/ecs/jskult-webapp/src/services/bio_view_service.py +++ b/ecs/jskult-webapp/src/services/bio_view_service.py @@ -2,7 +2,6 @@ import asyncio import functools import os import shutil -from copy import copy from datetime import datetime import pandas as pd @@ -154,15 +153,6 @@ class BioViewService(BaseService): # `startrow`と`startcol`で、Excelの書き込み位置を決定する。省略した場合はA1セルから書く。 data_frame_range = len(data_frame) - # Excelに罫線を引く - workbook = writer.book - sheet = workbook['Sheet1'] - # A2セルに罫線の書式を設定しておき、同じ書式を設定する - formatted_cell = sheet['A2'] - for row in sheet[f'A2:AK{data_frame_range + 1}']: - for cell in row: - cell._style = copy(formatted_cell._style) - data_frame_chunk_size = 2000 # 1回あたりの書き出し行数 is_first = True # ループの初回 # 指定行数ごとにデータを分割して処理