Scribble at 2020-10-13 14:32:45 Last modified: unmodified
<?php
$fp = fopen( $_FILES['userfile']['tmp_name'], "r" );
$csv = array();
while ( ( $csv[] = fgetcsv( $fp ) ) !== false )
{
;
}
fclose( $fp );
$lines = array();
$lines[0] = 'Subject,Start Date,Start Time,End Date,End Time,Description,Location' . "\n";
foreach( $csv as $line )
{
if ( ! is_array( $line ) OR $line == $csv[0] )
{
;
}
else if ( count( $line ) > 8 )
{
if ( $line[8] != '' )
{
$lines[] = $line[8] . ',' . $line[3] . ',' . $line[4] . ',' . $line[5] . ',' . $line[6] . ',' . $line[9] . "\n";
}
}
}
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=google_calendar.csv");
header("Content-Transfer-Encoding: binary");
foreach( $lines as $line )
{
echo $line;
}
return;
急な話だが、G Suite を会社で導入した一環として、デスクネッツを解約して Google Calendar にスケジュールや設備予約の運用を切り替えることになった。そのため、研修用のビデオをこれから作ったりするのだが、ひとまず先行してデスクネッツのスケジュールを Google Calendar に移行したい。ただ、既に解約したサービスにオプションの連携機能を追加するのはどうかと思うので、デスクネッツからスケジュールを CSV ファイルにエクスポートできるため、これを利用したい。ただ、これをそのまま Google Calendar にはインポートできないのだった。
そこで、http://sa1g.blogspot.com/2010/04/desknet.html の記事を見つけた。インポートに必要なカラムを取り出して成形しなおせばインポートできるようだ。そこで、フォームから "userfile" という名前で送信した CSV ファイルを Google Calendar でインポートできる CSV に変換するコードを書いたのが、上記の結果である。参考にした記事は Python だったが、PHP として書き直し、会社のサイトで(プライベートなスケジュールも登録してる人がいるだろうから)フォームに CSV ファイルを送信して、変換した CSV をダウンロードできるようにしてある。
テストとして作ったカレンダーにインポートしてみたら問題なかったため、さきほど社内にリリースしてある。注意点として、UTF-8(BOMなし)で CSV をエクスポートすることと、自分のスケジュールだけにしたほうがいいということ(他の人のも一緒にやると膨大な数になる)だ。あと、できれば最近のスケジュールだけにするようお勧めする(当社では2012年くらいから使っているが、8年分を取り込むのはやめたほうがいい)。