レバテックプラットフォームの作業報告をExcelから自動入力する(JavaScript + Node.js)
はじめに
レバテックプラットフォームの作業報告入力、毎月地味に面倒じゃないですか?
私の今の現場ではExCelで勤怠管理をしてます。
- Excelで勤怠は管理している
- でもWeb画面に手入力が必要
- コピペも微妙に手間
ということで
Excel → 自動変換 → ブラウザで一括入力
までを半自動化しました。
(簡易的です、お許しください)
前提
一応、私の環境です。
OS:ubuntu 24.04
ブラウザ:FireFox
Windowsの場合はちょっと違うかも
全体構成
今回やることはシンプルです。
- Excelを読み込む(Node.js)
- JSON形式に変換
- ブラウザでJavaScriptを実行して自動入力
ちなみに、Excelのフォーマットによって調整は必要だと思います。
今回は私の現場で使用しているフォーマットをベースにしてます。

完成イメージ
- Excelを置く
- コマンド1発
- ブラウザでスクリプト実行
→ 作業時間が一括入力される
① Excel → JSON変換スクリプト
フォルダ構成
~/Documents/levtech_auto/
├── convert.js
└── excelFile/
└── (Excelファイル)
convert.js
const XLSX = require("xlsx");
const fs = require("fs");
const path = require("path");
// Excel格納フォルダ
const DIR = "/home/(ユーザー)/Documents/levtech_auto/excelFile";
// .xlsxファイルを探す
const files = fs.readdirSync(DIR).filter(f => f.endsWith(".xlsx"));
if (files.length === 0) {
console.error("❌ Excelファイルが見つかりません");
process.exit(1);
}
if (files.length > 1) {
console.warn("⚠️ 複数のExcelがあります。先頭を使用:", files[0]);
}
const FILE_PATH = path.join(DIR, files[0]);
console.log("📄 使用ファイル:", FILE_PATH);
const wb = XLSX.readFile(FILE_PATH);
const sheet = wb.Sheets[wb.SheetNames[0]];
const rows = XLSX.utils.sheet_to_json(sheet, { header: 1 });
function pad(n) {
return String(n).padStart(2, "0");
}
function isNumber(v) {
return typeof v === "number" && !isNaN(v);
}
function toTime(h, m) {
if (!isNumber(h) || !isNumber(m)) return null;
return `${pad(h)}:${pad(m)}`;
}
function toBreak(h, m) {
if (!isNumber(h) || !isNumber(m)) return "0:00";
return `${pad(h)}:${pad(m)}`;
}
const result = {};
rows.forEach(row => {
if (!row || row.length < 7) return;
const day = row[1];
const startH = row[3];
const startM = row[4];
const endH = row[5];
const endM = row[6];
const restH = row[9];
const restM = row[10];
// 数値データのみ採用(ヘッダ除外)
if (!isNumber(day) || !isNumber(startH) || !isNumber(endH)) return;
const date = new Date((day - 25569) * 86400 * 1000);
const mm = pad(date.getMonth() + 1);
const dd = pad(date.getDate());
const key = `${mm}/${dd}`;
result[key] = {
start: toTime(startH, startM),
end: toTime(endH, endM),
break: toBreak(restH, restM),
};
});
fs.writeFileSync("output.js", "const data = " + JSON.stringify(result, null, 2));
console.log("✅ 完了 件数:", Object.keys(result).length);
convert.js実行
node convert.js
👉 output.js が生成される
output.jsの中身はこんな感じのはず(長いので冒頭のみ)
const data = {
"03/02": {
"start": "10:00",
"end": "22:30",
"break": "02:00",
},
"03/03": {
"start": "10:00",
"end": "21:30",
"break": "01:00",
},
② ブラウザで自動入力
レバテックの作業報告画面を開いて、
DevToolsのコンソールにoutput.jsの中身を貼り付けてEnter

続いて、同じくDevToolsのコンソールに以下のスクリプトを入力し、Enter
自動入力スクリプト
const $ = window.jQuery;
$('table tbody tr').each(function() {
const row = $(this);
// 日付取得
const dateText = row.find('td').first().text().trim();
const match = dateText.match(/\d{2}\/\d{2}/);
if (!match) return;
const key = match[0];
const d = data[key];
if (!d) return;
// 各入力欄
const start = row.find('input[name$="[start_time]"]');
const end = row.find('input[name$="[end_time]"]');
const relax = row.find('input[name$="[relax_time]"]');
// 値セット
start.val(d.start);
end.val(d.end);
relax.val(d.break);
// ★これがレバテックのトリガー
relax.trigger('focusout');
});
Enterで作業時間が反映されるはず。
まとめ
まあ、お気づきかと思いますが、ChatGPTの監修です。
今回は私の使用してる勤怠管理Excelをベースにしてますので、そのままでは使用できないと思います。
この記事をChatGPTに読ませて、
似たようなの作って〜〜ってお願いすればささっと作ってくれるはず。
おわりに
ちょっとしたスクリプトですが、
面倒な作業を少しでも減らせれば。。。
