GoogleスプレッドシートでHTMLをプレーンテキストに変換する方法
Googleスプレッドシートを使用していると、時折HTML形式のデータを扱う場面がある。例えば、ウェブからデータをインポートしたり、他のシステムからデータを取り込んだりする際に、HTMLタグが混在してしまうことがある。これをそのままにしておくと、データの視認性が低下したり、分析や処理が難しくなったりする。そこで、今回はGoogle Apps Script(GAS)を使ったHTMLからプレーンテキストへの変換方法、そしてGASを使えないシーンでの対応策について解説する。
Google Apps Scriptを使ってHTMLをプレーンテキストに変換する
まず、Google Apps Scriptを使えば、HTMLを簡単にプレーンテキストに変換できる。以下のスクリプトを使用すると、スプレッドシート内のセルに含まれるHTMLタグを削除し、プレーンテキストに変換することができる。
function htmlToPlainText() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getActiveRange();
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
values[i][j] = stripHtml(values[i][j]);
}
}
range.setValues(values);
}
function stripHtml(html) {
if (typeof html !== 'string') {
return html;
}
// HTMLタグを除去するための正規表現を使用
var plainText = html.replace(/<\/?[^>]+(>|$)/g, "");
// エンティティのデコード(例: & -> &)
plainText = plainText.replace(/ /g, " ");
plainText = plainText.replace(/&/g, "&");
plainText = plainText.replace(/"/g, "\"");
plainText = plainText.replace(/</g, "<");
plainText = plainText.replace(/>/g, ">");
return plainText;
}
このスクリプトは、スプレッドシート内で選択された範囲のセルに含まれるHTMLをプレーンテキストに変換するものである。非常に強力で、複数のセルや大量のデータにも対応できる。
GASを使えないシーンでの対処法
しかし、GASを使えない状況もあるかもしれない。例えば、社内ポリシーでスクリプトの実行が制限されている場合や、簡単な処理を手早く行いたい場合などである。そのような場合、Googleスプレッドシートに標準で備わっている関数を使ってHTMLタグを除去する方法がある。
- SUBSTITUTE関数を使用してタグを削除
SUBSTITUTE関数は、特定の文字列を他の文字列に置き換えることができる。例えば、セルA1の<br>タグを削除するには、次のようにする。
=SUBSTITUTE(A1, "<br>", "")ただし、複数のタグが混在する場合は、すべてのタグに対してこの処理を行う必要がある。
2. REGEXREPLACE関数を使用してタグを一括削除
より柔軟に対応するために、REGEXREPLACE関数を使うことも可能である。正規表現を使用して、すべてのHTMLタグを一括で削除する。
=REGEXREPLACE(A1, "<[^>]+>", "")
- これにより、セルA1内のすべてのHTMLタグが削除され、プレーンテキストのみが残る。
まとめ
Google Apps Scriptを使えば、HTMLをプレーンテキストに変換する処理を自動化し、大量のデータにも対応できる。スクリプトを使うことで、柔軟性と効率を高めることができる。一方で、スクリプトを使用できないシーンでは、Googleスプレッドシートの組み込み関数を活用することで、手動でHTMLをプレーンテキストに変換することも可能である。状況に応じて適切な方法を選択し、効率的に作業を進めてほしい。
それといくつか。
少し応用編で。
GASスクリプト例:引数でセルを指定してHTMLをプレーンテキストに変換
function convertHtmlToPlainText(cellReference) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 引数で渡されたセルの範囲を取得
var cell = sheet.getRange(cellReference);
// セル内のHTMLを取得
var htmlContent = cell.getValue();
// HTMLをプレーンテキストに変換
var plainText = stripHtml(htmlContent);
// プレーンテキストをセルに設定
cell.setValue(plainText);
}
function stripHtml(html) {
if (typeof html !== 'string') {
return html;
}
// HTMLタグを除去するための正規表現を使用
var plainText = html.replace(/<\/?[^>]+(>|$)/g, "");
// エンティティのデコード(例: & -> &)
plainText = plainText.replace(/ /g, " ");
plainText = plainText.replace(/&/g, "&");
plainText = plainText.replace(/"/g, "\"");
plainText = plainText.replace(/</g, "<");
plainText = plainText.replace(/>/g, ">");
return plainText;
}
使い方
- 上記のスクリプトをGoogle Apps Scriptエディタに貼り付けて保存する。
convertHtmlToPlainText関数を実行するときに、セルの参照を引数として渡す。
convertHtmlToPlainText("A1");