Chromebook + web版Excel の csv ファイル入出力

（2024.3.19 更新）
web版Excel も CSV エクスポートができるようになりましたが、記事は残しておきます。

https://insider.microsoft365.com/en-us/blog/export-to-csv-in-excel-for-the-web?ocid=usoc_TWITTER_M365_spl100005386717836

（2024.2.17 更新）
内容を大幅に絞って、タイトルを変更しました。
旧タイトル「Chromebook + web版Excel でも十分かな？」

初稿に載せた PowerShell や ScriptLab の利用に関する内容は一旦削除して、後日あらためて記事にする予定です。
## はじめに
Chromebook での表計算は Google Sheets か web版Excel を使うことになりますが、web版Excel の場合 csv ファイルの出力ができない（入力も一旦 OneDrive にアップロードが必要）等の不満があります。
Linux コンソールとクリップボードで使い勝手を改善したいと思います。

内容は、以前に投稿した[「Excelでちょっとした正規表現を使いたい」](https://qiita.com/Mt_SQ/items/79383ee6fb31e78ce1bb)の延長になります。

## 準備
### ターミナルの準備
Linux 開発環境に用意される「ターミナル」アプリは ChromeOS とのクリップボードの共有ができません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209885/dc6c757c-4cf7-c3ae-8023-17c68e11ae65.png)

よって、Konsole(https://konsole.kde.org/) や VSCode のターミナルなど、他のターミナルを用意します。
### クリップボードインターフェイス
Linux のクリップボードコマンドには xsel や xclip などがありますが、今回は xsel を使いました。
`sudo apt install xsel` でインストールできます。

## 動作検証環境
Chromebook + web版Excel で動作確認しています。

+ Chromebook：ASUS CX1500CKA-EJ0015(Celeron N4500,メモリ4GB)
+ Linux 開発環境：Debian 11
+ ターミナル：Konsole

## csv ファイルの入出力
### csv ファイルに出力
下図は動作確認の様子です。（左:web版Excel, 右:Konsole ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209885/97f2c3fc-1571-cab8-b493-607e83042a91.png)

web版Excel でセル範囲をコピーして `xsel -b` でクリップボードを取得すると列がタブ区切りになっていることがわかります。

続いて、od コマンドにパイプして文字単位で出力する（`xsel -b | od -An -c`）と、行区切りは CRLF（`\r\n`）で、最終行末尾に改行文字の無いことがわかります。
構造がわかったら sed で
+ タブ（`\t`）からコンマへの置換
+ CR（`\r`）除去
+ 末尾に LF を追加

して、あらためて od で確認します。

:::note warn
Google Sheets や デスクトップ版Excel など、他の表計算アプリケーションでは、それぞれ区切りの構造に多少の違いがあります。十分確認して csv に変換してください。
:::

うまく置換できているようなので、リダイレクトで csv ファイルに書き出します。
```bash:bash
xsel -b | sed 's/\t/,/g;s/\r//g;$a\' > csvout.csv
```
なお、行数が多い場合は csv ファイル出力する前に、head コマンドで事前に一部を確認しておくことも可能ですし、**シートの必要な部分だけを選択・コピーしてファイル出力する**ことも可能です。

なお、<font color=red>**リダイレクトによるファイルの上書きには十分注意**</font>してください。
### csv ファイルから入力
下図は、画面右の手順で csv ファイルを作成して、左の Excel に貼り付けた様子です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209885/f46a781b-6c36-fcf8-89a8-f361e5837dd2.png)
sed でコンマをタブに変換し、`xsel -b` でクリップボードに渡します。
**`xsel -b` はクリップボードの読み書き両方に使えます。**
```bash:bash
sed 's/,/\t/g' csvin.csv | xsel -b
```
あとは、web版Excel にペーストするだけです。（上図左）
### その他もろもろ
#### 数値の扱い
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209885/72f95f04-0327-a51a-a162-815ea728661a.png)
図は A列/B列=C列 です。
画面表示に関わらず、クリップボードは既定の桁数で記録されます。
#### 数式も保存しておきたい
これは web版Excel に限った話ではありませんが、ワークシートで`=FORMULATEXT` を使えば数式も合わせて保存できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209885/fce84190-9a5f-37ff-6617-874bf83a5672.png)

#### セル内改行
セル内改行がある場合は、LF を含む文字列を`"`（ダブルクォート）で囲みます。

echo で直接書き込んで確認してみます。
```bash:bash
echo -e '"あ\nい\nう"\t\t"い\nろ\nは"\n一\t二\t三' | xsel -b
```
Excel にペーストすると、ちゃんとセル内改行されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209885/a28ab9b8-ad64-fd99-6514-3709db7c52d6.png)
### おことわり
そもそも web版Excel で大規模なワークシートを扱うことは考えにくい（個人の感想）ので、クリップボードのサイズや処理速度などについて検証はしていません。
個人的な事務処理程度ならば低スペックのハードウェアでも十分実用になるかと思います。

## 参考
なお、クリップボードを使ったExcelとPythonの連携は、こちらの記事が解説も丁寧で参考になります。

https://qiita.com/run1000dori/items/83975332e395a387eace