openpyxlだけだと無理なので

IT

openpyxlで出力したExcelのファイルにテーブルを設定するとフィルターが利用出来るが、このフィルターはセルへの値の入力時にフィルタの項目をまとめるので、日付をセルに設定してもファイルを開いただけだとテキストとして認識されている。

じゃあどうするかというと、xlwingsで操作するかOfficeScriptで操作するかなんだけど、OfficeScriptでやってみた。

function main(workbook: ExcelScript.Workbook) {
	// シートを取得
	let sheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();

	// 最後の行番号を取得
	let lastRow: number = sheet.getUsedRange().getRowCount();

  // 適用する列
	cols = [6, 10, 13]

	cols.forEach((col, i) => {
		// 適用する列の2行目から最後の行までの範囲を取得
		let range: ExcelScript.Range = sheet.getRangeByIndexes(1, col, lastRow - 1, 1);

		// 各セルの値を取得し、そのセルに設定
		let values: (string | number | boolean)[][] = range.getValues();
		values.forEach((row, index) => {
			let cellValue: string | number | boolean = row[0]; // セルの値を取得
			range.getCell(index, 0).setValue(cellValue); // 取得した値を同じセルに設定
		});
	});
}

ちゃんと、年→月→日、というヒエラルキーでフィルタ項目を選択できるようになる。