【基礎から】PythonでExcel扱えるようにする（5）テキストデータの読み込み～エクセルに書き込み

## 目的
テキストファイルから定型部分の取り込みからエクセルファイルへの書き込みをできるようにする。

## step6:テキストファイルの読み込み～エクセルに張り付け
```python:
import openpyxl

def step06():
    print("step06")

    wb = openpyxl.Workbook()
    ws = wb["Sheet"]

    # テキストファイルオープン(UTF-8形式)
    with open('./lifedata_man_2023.txt', encoding='utf-8') as f:

        # 1行読み込み（先頭行）
        line = f.readline()
        # コピーする行番号を1にする
        num_line = 1
        # データがあるだけ繰り返す
        while line:
            # 1行のデータを表示（改行部分を除く）
            line_1 = line.rstrip("\n")
            # 半角スペースで分割
            line_2 = line_1.split(" ")
            print(line_2)
            # エクセル上にコピー
            num_col = 1
            for col_data in line_2:
                ws.cell(num_line,num_col).value = col_data
                num_col += 1

            # 次の行を読み込み
            line = f.readline() 
            # コピーする行番号を1追加
            num_line += 1
    
    # エクセルファイルの保存
    wb.save('input_file_step06.xlsx')
    wb.close()
    
# 動作部 
step06()
```
#### 動作結果（'input_file_step06.xlsx'）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176596/5a2511a5-c400-5a00-d4ef-37225d25e1db.png)

## step7:テキストデータの取り込み～エクセルに張り付け（データ部の属性を指定）
```python:
import openpyxl

def step07():
    print("step07")

    wb = openpyxl.Workbook()
    ws = wb["Sheet"]

    # テキストファイルオープン(UTF-8形式)
    with open('./lifedata_man_2023.txt', encoding='utf-8') as f:

        # 1行読み込み（先頭行）
        line = f.readline()
        # コピーする行番号を1にする
        num_line = 1
        # データがあるだけ繰り返す
        while line:
            # 1行のデータを表示（改行部分を除く）
            line_1 = line.rstrip("\n")
            # 半角スペースで分割
            line_2 = line_1.split(" ")
            print(line_2)

            # エクセル上にコピー
            # ヘッダ部(2行目まで)
            if(num_line <= 2):
                num_col = 1
                for col_data in line_2:
                    ws.cell(num_line,num_col).value = col_data
                    num_col += 1
            # 2行目以降は整形する
            else:
                age = int(line_2[0])
                rate = float(line_2[1])
                lx = int(line_2[2])
                ndx = int(line_2[3])
                nLx = int(line_2[4])
                Tx = int(line_2[5])
                ex = float(line_2[6])
                # セルへコピー
                ws.cell(num_line,1).value = age
                ws.cell(num_line,2).value = rate
                ws.cell(num_line,2).number_format = '0.00000' #
                ws.cell(num_line,3).value = lx
                ws.cell(num_line,4).value = ndx
                ws.cell(num_line,5).value = nLx
                ws.cell(num_line,6).value = Tx
                ws.cell(num_line,7).value = ex
                ws.cell(num_line,7).number_format = '0.00'

            # 次の行を読み込み
            line = f.readline() 
            # コピーする行番号を1追加
            num_line += 1

    # オートフィルタ範囲の設定
    ws.auto_filter.ref = 'A2:G2'
    # ウィンドウ枠の固定(2行目まで)
    ws.freeze_panes = 'A3'
    
    # エクセルファイルの保存
    wb.save('input_file_step07.xlsx')
    wb.close()

# 動作部 
step07()
```

#### 動作結果（'input_file_step07.xlsx'）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176596/126dcbce-3c3c-6025-33a3-c9ba8ddbaa21.png)

# サンプルソースコード＆データ(github)
https://github.com/YossyIto/openpyxl_practice

#
[本編へ戻る](https://qiita.com/YossyIto/items/ae822beb7350338e89fb)

### 履歴
2024/08/10 新規作成 

### リンク
[1] 生命表 2023年 男
https://www.mhlw.go.jp/toukei/saikin/hw/life/life23/dl/life23-06.pdf

### eof