Skip to content

Instantly share code, notes, and snippets.

@naosim
naosim / gasGannt.js
Created March 23, 2023 02:22
GoogleSpreadSheetでガントチャートを使うときのユーティリティ
const headers = ["ID", "タスク名", "開始日", "終了日", "日数", "依存タスク"];
function setup() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");
if(sheet.getRange(1, 1).getValue() == "入力用") {
throw new Error("すでに実行済みです");
}
sheet.appendRow(["入力用"])
sheet.appendRow(headers)
@naosim
naosim / parseDateString.js
Created March 23, 2023 01:34
日付を返す関数。AIが書いたので意図通り動くかわかりません。
function parseDateString(dateStr, holidays) {
let date;
if (/^\d{4}\/\d{1,2}\/\d{1,2}$/.test(dateStr)) {
// 日付指定の場合
date = new Date(dateStr);
} else if (/^FY\d{2}\/\dQ$/.test(dateStr)) {
// 年度・四半期指定の場合
const fy = parseInt(dateStr.slice(2, 4), 10);
const q = parseInt(dateStr.slice(-2, -1), 10);
@naosim
naosim / addBusinessDays.js
Created March 23, 2023 00:15
営業日ベースでn日後の日付を計算する
function addBusinessDays(date, daysToAdd, holidays) {
// weekends: 0 = Sunday, 6 = Saturday
const weekendDays = [0, 6];
// create a set of holidays for O(1) lookup time
const holidaySet = new Set(holidays.map((holiday) => holiday.getTime()));
let businessDaysAdded = 0;
let currentDate = new Date(date.getTime());
while (businessDaysAdded < daysToAdd) {
// add one day to the current date
@naosim
naosim / getFilePathListById.js
Created March 17, 2023 13:10
GASでファイルIDをパスに変換する
function getFilePathListById(fileId) {
var file = DriveApp.getFileById(fileId);
return getParentPathList(file).map(v => 'G:\\' + v + '\\' + file.getName());
}
function iteratorToArray(iterator) {
var result = [];
while (iterator.hasNext()) {
result.push(iterator.next());
}
@naosim
naosim / analizeJava.js
Created March 7, 2023 13:41
Javaのファイルを漁ってクラス構成を分析する
/*
Javaのファイルを漁ってクラス構成を分析する
---
# 実行環境 node.js
古いバージョンでも動くようにする。モダンな書き方はアロー式を使う程度にする
# 出力形式
[
{
filePath: string,
@naosim
naosim / convertToMarkdown.mjs
Created March 3, 2023 05:37
ConvertToMarkdown
function tableToMarkdown(table) {
var lines = [
['カラム名', '型', 'PK', 'UNIQUE', 'NOT NULL', '備考'],
];
lines.push(new Array(lines[0].length).fill('---'));
// if(table.tableNameComment.length > 0) {
// lines = [table.tableNameComment, ...lines];
// }
table.columns
.map(v => [v.columnName, v.type, v.isPk ? '◯' : '', v.isUnique ? '◯' : '', v.isNotNull ? '◯' : '', v.comment])
<!DOCTYPE html>
<meta charset="utf-8" />
<!-- tinytestをGitHub Pagesにホスト -->
<script src="https://naosim.github.io/jstinytest/tinytest.js"></script>
<h1>test</h1>
<script>
// product code
function add(a, b) {
@naosim
naosim / insertTodaysTitle.js
Created February 11, 2023 15:06
markdownに今日の日付のタイトル(H1)をいれる
/**
*
* @param {string} markdownText
* @param {Date} now
*/
function insertTodaysTitle(markdownText, now) {
markdownText = markdownText.trim();
const firstLine = markdownText.split("\n")[0].trim();
const zerofill2 = (num) => ("0" + num).slice(-2);
@naosim
naosim / comDate.js
Created November 23, 2019 07:03
予算管理で必要な日付への変換をする。スプレッドシートから呼び出すカスタム関数用
function comDate(dates, typesCsv) {
var convert = function(d, type) {
if(type == '年月') {
return d.getYear() + ('0' + (d.getMonth() + 1)).slice(-2);
}
var nendo = 'FY' + (d.getMonth() + 1 < 4 ? d.getYear() - 1: d.getYear());
if(type == '年度') {
return nendo;
}
if(type == '半期') {
@naosim
naosim / analizeJava.js
Created November 21, 2022 21:45
javaのソースコードを解析する
/*
Javaのファイルを漁ってクラス構成を分析する
---
# 実行環境 node.js
古いバージョンでも動くようにする。モダンな書き方はアロー式を使う程度にする
# 使い方
- ROOT_PATHを決める
- node analizeJava.js