evmtools-node
Version:
このライブラリは、プライムブレインズ社で利用している「進捗管理ツール(Excel)」ファイルを読み込み、 プロジェクトの進捗状況や要員別の作業量を可視化するためのライブラリです。
123 lines • 5.52 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const yargs_1 = __importDefault(require("yargs"));
const helpers_1 = require("yargs/helpers");
// import { getLogger } from '../logger'
const excel_csv_read_write_1 = require("excel-csv-read-write");
const TaskService_1 = require("../domain/TaskService");
const ExcelTaskRowCreator_1 = require("../infrastructure/ExcelTaskRowCreator");
const common_1 = require("../common");
const styles_1 = require("../common/styles");
// const logger = getLogger('main')
// こちらもTaskRowCreatorのサンプル。
const main = async () => {
const { excelPath } = createArgs();
const reader = new ExcelTaskRowCreator_1.ExcelTaskRowCreator(excelPath);
const rows = await reader.createRowData();
const baseDates = (0, common_1.generateBaseDates)(new Date('2025-06-13T00:00:00+09:00'), new Date('2025-06-28T00:00:00+09:00'));
// const filters = rows.filter((row) => row.id >= 23) //
// printTaskRows(filters, baseDates)
const taskService = new TaskService_1.TaskService();
const taskNodes = taskService.buildTaskTree(rows);
const tasks = taskNodes.filter((row) => row.id >= 23); //
(0, common_1.printTaskNodes)(tasks, baseDates);
printTaskNodes1(tasks);
const flatternRows = taskService.convertToTaskRows(taskNodes);
const workbook = await (0, excel_csv_read_write_1.createWorkbook)();
const converters = {
// なんか、日付はコレやらないとキレイに出力できない
startDate: (value) => value,
endDate: (value) => value,
actualStartDate: (value) => value,
actualEndDate: (value) => value,
expectedProgressDate: (value) => value,
};
(0, excel_csv_read_write_1.json2workbook)({
instances: rows,
workbook,
sheetName: 'rows',
applyStyles: (0, styles_1.createStyles)(common_1.style5),
converters,
});
(0, excel_csv_read_write_1.json2workbook)({
instances: flatternRows,
workbook,
sheetName: 'flatternRows',
applyStyles: (0, styles_1.createStyles)(common_1.style5),
converters,
});
workbook.deleteSheet('Sheet1');
await (0, excel_csv_read_write_1.toFileAsync)(workbook, 'result.xlsx');
// await sub()
// console.table(flattern)
};
// const sub = async () => {
// let robots: unknown[] = await csv2json('robotSample.csv')
// // robots = robots.map((robot) => ({ ...robot, now: new Date() })) // 日付列を追加 unknown型には使えないので注意
// robots = robots.map((robot) => Object.assign({}, robot, { now: new Date() })) // 日付列を追加
// console.table(robots)
// // なにも考えずにダンプ
// // json2excel(robots, 'output/robots.xlsx').catch((error) => console.log(error))
// // プロパティごとに、変換メソッドをかませたケース
// // nowとIdというプロパティには、変換methodを指定
// const converters: Converters = {
// now: (value: unknown) => value,
// Id: (value: string) => '0' + value,
// }
// json2excel(robots, 'output/robots1.xlsx', '', 'Sheet1', converters).catch((error) =>
// console.log(error)
// )
// // プロパティごとに、変換メソッドをかませたケース.
// // nowとIdというプロパティには、変換methodを指定
// // さらにその列(M列) に、日付フォーマットでExcel出力する
// const excelFormatter = (
// instances: any[],
// workbook: XlsxPopulate.Workbook,
// sheetName: string
// ) => {
// const rowCount = instances.length
// const sheet = workbook.sheet(sheetName)
// sheet.range(`M2:M${rowCount + 1}`).style('numberFormat', 'yyyy/mm/dd hh:mm') // 書式: 日付+時刻
// // よくある整形パタン。
// // sheet.range(`C2:C${rowCount + 1}`).style('numberFormat', '@') // 書式: 文字(コレをやらないと、見かけ上文字だが、F2で抜けると数字になっちゃう)
// // sheet.range(`E2:F${rowCount + 1}`).style('numberFormat', 'yyyy/mm/dd') // 書式: 日付
// // sheet.range(`H2:H${rowCount + 1}`).style('numberFormat', 'yyyy/mm/dd hh:mm') // 書式: 日付+時刻
// }
// json2excel(robots, 'output/robots2.xlsx', '', 'Sheet1', converters, excelFormatter).catch(
// (error) => console.log(error)
// ) // プロパティ指定で、変換をかける
// }
const createArgs = () => {
const argv = (0, yargs_1.default)((0, helpers_1.hideBin)(process.argv))
.option('excelPath', {
type: 'string',
description: 'Excel file Path',
default: './classdata.xlsx',
})
.option('output', {
type: 'string',
description: 'Output directory',
default: './output',
})
.help()
.parseSync(); // 型付きで取得
return argv;
};
// eslint-disable-next-line @typescript-eslint/no-floating-promises
main();
function printTaskNodes1(taskNodes) {
for (const rootTask of taskNodes) {
// root単位でfor文回せば良い
for (const row of rootTask) {
printTask1(row);
}
}
}
function printTask1(row) {
console.log(row.id, row.name, row.assignee);
}
//# sourceMappingURL=cli-test.js.map