前回、証券コードである「4桁の数字」か「3桁の数字+A」を探して収集しました。
もう少し汎用性を上げて、「PDFのID」と「抽出条件」をシートに入力し、それを読み取って動作させるように、コードを書き直しました。
[比較データ] シートの一致した行を転記するようにしてあります。
また、シート上のボタンを押すことでコードを実行できるようにしました。
シート用意
手元にあるデータのシート名を [比較データ]、結果を出力するシート名を [PDF一致] としておきます。
更に、条件を入力するシート [条件] を作成します。

[条件]シートに、「PDFのID」(B1セル)と「抽出条件」(B3)を入力しました。

コード
以下のコードを実行します。
前回、「4桁の数字 または 3桁の数字 + 英字1文字」で抽出しましたが、今のところ最後の英字は「A」しかないので、Aかaだけを探すように書き換えました。
function convertPdfToGoogleDoc() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const conditionSheet = ss.getSheetByName('条件');
const dataSheetName = '比較データ';
const outputSheetName = 'PDF一致';
// ▼ 条件シートからPDF IDと正規表現を取得
const pdfFileId = conditionSheet.getRange('B1').getValue().toString().trim();
const regexPatternStr = conditionSheet.getRange('B3').getValue().toString().trim();
const dataPattern = new RegExp(regexPatternStr, 'g');
// ▼ PDF → Googleドキュメントへ変換
const resource = {
title: 'temp_converted_doc_for_extraction',
mimeType: MimeType.GOOGLE_DOCS
};
const newFile = Drive.Files.copy(resource, pdfFileId);
const docId = newFile.id;
Logger.log('変換されたGoogleドキュメントID: ' + docId);
try {
// ▼ Googleドキュメントの本文を取得
const doc = DocumentApp.openById(docId);
const text = doc.getBody().getText();
// ▼ 正規表現でコード抽出
const matchedCodes = [...new Set(text.match(dataPattern) || [])];
// ▼ 比較データシートの取得
const dataSheet = ss.getSheetByName(dataSheetName);
if (!dataSheet) throw new Error(`比較用データシート「${dataSheetName}」が見つかりません`);
const allData = dataSheet.getDataRange().getValues();
const headers = allData[0];
const rows = allData.slice(1);
const matchedRows = [];
// ▼ A列と一致する行を収集
// matchedCodes をすべて大文字にしてセット化
const matchedCodeSet = new Set(matchedCodes.map(c => c.toString().toUpperCase()));
// 比較時にも大文字にして比較
rows.forEach(row => {
const code = row[0]?.toString().trim().toUpperCase();
if (matchedCodeSet.has(code)) {
matchedRows.push(row);
}
});
// ▼ 出力先シートを準備・出力
let outputSheet = ss.getSheetByName(outputSheetName);
if (!outputSheet) {
outputSheet = ss.insertSheet(outputSheetName);
} else {
outputSheet.clear();
}
// ▼ ヘッダー行の出力
outputSheet.getRange(1, 1, 1, headers.length).setValues([headers]);
// ▼ 一致データの出力
if (matchedRows.length > 0) {
outputSheet.getRange(2, 1, matchedRows.length, headers.length).setValues(matchedRows);
} else {
outputSheet.getRange(2, 1).setValue('一致なし');
}
} finally {
// ▼ 一時Googleドキュメントをゴミ箱へ
DriveApp.getFileById(docId).setTrashed(true);
Logger.log('変換ドキュメントをゴミ箱に移動しました: ' + docId);
}
}
ボタンの配置
Googleスプレッドシート上にボタンを配置して、[拡張機能] > [Apps Script] で作成したGASコードを実行できるようにします。
メニューの [挿入] > [図形描画] > [図形] を選び、お好きな図形を挿入します。

適宜、「実行」などの文字を入れたら、「保存して閉じる」とし、図形がシートに表示されます。

図形をクリックすると、右上に [縦の3点] が現れるので、それをクリックして、[スクリプトを割り当て] を選択します。

表示されたダイアログに、実行したい関数名(今回は convertPdfToGoogleDoc)を入力し、[OK]をクリックします。

[実行]ボタンを押すと、スクリプトが実行されます。

コメント