(2024.3.19 更新)
web版Excel も CSV エクスポートができるようになりましたが、記事は残しておきます。
(2024.2.17 更新)
内容を大幅に絞って、タイトルを変更しました。
旧タイトル「Chromebook + web版Excel でも十分かな?」
初稿に載せた PowerShell や ScriptLab の利用に関する内容は一旦削除して、後日あらためて記事にする予定です。
はじめに
Chromebook での表計算は Google Sheets か web版Excel を使うことになりますが、web版Excel の場合 csv ファイルの出力ができない(入力も一旦 OneDrive にアップロードが必要)等の不満があります。
Linux コンソールとクリップボードで使い勝手を改善したいと思います。
内容は、以前に投稿した「Excelでちょっとした正規表現を使いたい」の延長になります。
準備
ターミナルの準備
Linux 開発環境に用意される「ターミナル」アプリは ChromeOS とのクリップボードの共有ができません。
よって、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 )
web版Excel でセル範囲をコピーして xsel -b
でクリップボードを取得すると列がタブ区切りになっていることがわかります。
続いて、od コマンドにパイプして文字単位で出力する(xsel -b | od -An -c
)と、行区切りは CRLF(\r\n
)で、最終行末尾に改行文字の無いことがわかります。
構造がわかったら sed で
- タブ(
\t
)からコンマへの置換 - CR(
\r
)除去 - 末尾に LF を追加
して、あらためて od で確認します。
Google Sheets や デスクトップ版Excel など、他の表計算アプリケーションでは、それぞれ区切りの構造に多少の違いがあります。十分確認して csv に変換してください。
うまく置換できているようなので、リダイレクトで csv ファイルに書き出します。
xsel -b | sed 's/\t/,/g;s/\r//g;$a\' > csvout.csv
なお、行数が多い場合は csv ファイル出力する前に、head コマンドで事前に一部を確認しておくことも可能ですし、シートの必要な部分だけを選択・コピーしてファイル出力することも可能です。
なお、リダイレクトによるファイルの上書きには十分注意してください。
csv ファイルから入力
下図は、画面右の手順で csv ファイルを作成して、左の Excel に貼り付けた様子です。
sed でコンマをタブに変換し、xsel -b
でクリップボードに渡します。
xsel -b
はクリップボードの読み書き両方に使えます。
sed 's/,/\t/g' csvin.csv | xsel -b
あとは、web版Excel にペーストするだけです。(上図左)
その他もろもろ
数値の扱い
図は A列/B列=C列 です。
画面表示に関わらず、クリップボードは既定の桁数で記録されます。
数式も保存しておきたい
これは web版Excel に限った話ではありませんが、ワークシートで=FORMULATEXT
を使えば数式も合わせて保存できます。
セル内改行
セル内改行がある場合は、LF を含む文字列を"
(ダブルクォート)で囲みます。
echo で直接書き込んで確認してみます。
echo -e '"あ\nい\nう"\t\t"い\nろ\nは"\n一\t二\t三' | xsel -b
Excel にペーストすると、ちゃんとセル内改行されています。
おことわり
そもそも web版Excel で大規模なワークシートを扱うことは考えにくい(個人の感想)ので、クリップボードのサイズや処理速度などについて検証はしていません。
個人的な事務処理程度ならば低スペックのハードウェアでも十分実用になるかと思います。
参考
なお、クリップボードを使ったExcelとPythonの連携は、こちらの記事が解説も丁寧で参考になります。