phpでExcel操作(PHPExcel)

※今では非推奨となったが、古いPHP環境で動かすならPHPExcelを使うしかない。

新しい環境ならPHPOffice/PhpSpreadsheetを使ってね。

準備

  • PHPExcelのコードをgithubからzipでダウンロード
  • 解凍してClassesフォルダ内にあるPHPExcelフォルダとPHPExcel.phpをサーバー上にコピー。参照できる位置におくこと。

使い方

<?php
$filepath = "/home/saito/File/sample.xls";

//Classesディレクトリを配置したパスを指定
$path = "Classes/";
require_once($path . "PHPExcel.php");
require_once($path . "PHPExcel/IOFactory.php");

//拡張子がxlsx対応 拡張子によって読み込みの仕方を変える
preg_match('/[^.]+$/', $filepath, $tmp);
$extension = $tmp[0];

//xls
if($extension == "xls"){
	$xls = PHPExcel_IOFactory::load($filepath);
//xlsx
}else{
	$xls = PHPExcel_IOFactory::createReader('Excel2007')->load($filepath);
}

//ファイル内に複数のシートがある時対応
foreach ($xls->getSheetNames() as $i => $sheetName) {

	//下記二行で$i番目のシートを開く
	$xls->setActiveSheetIndex($i);
	$sheet = $xls->getActiveSheet();

	//各行を取得 $rには行番号が格納される
	foreach ($sheet->getRowIterator() as $r => $row) {

		//セルを取得 $cには列の記号(AとかB)が格納される
		foreach ($row->getCellIterator() as $c => $cell) {

			//セルの番号とセル内の値を出力
			echo $c . $r . ":" . $cell->getCalculatedValue() . "<br>";
		}
	}
}

参照するシートが決まってるなら

for($i=0;$i<4;$i++){

	// シートを取得
	$sheet = $excel->getSheet($i);

        ....
}

というやり方もあり。

phpでurl指定でファイルを保存(ダウンロード)

//メモリにファイル全てを読み込まずに、新しいファイルへ保存する。
function download($fromurl, $tofile) {
    $fp = fopen($fromurl, 'r');
    $fpw = fopen($tofile, 'w');
    $size = 0;
    
    while (!feof($fp)) {
        $buffer = fread($fp, 1024);
        if ($buffer === false) {
            $size = false;
            break;
        }
 
        $wsize = fwrite($fpw, $buffer);
        if ($wsize === false) {
            $size = false;
            break;
        }
 
        $size += $wsize;
    }
 
    fclose($fp);
    fclose($fpw);
    return $size;
}

Googleカレンダーに追加 / iCalに追加 リンクを作成する方法

ラジオNIKKEIのページにあったのを真似したい。

先人が作ったURLを作るライブラリとかあるみたい。

MFC使ったDLLのプロジェクト visual studio 2019 をむやみにアップデートするとビルド通らなくなる/動かしてみるとエラーでることあるので注意

32bitビルドはOKだけど64bitビルドだと動かないとか、何度か起きた。
今動いているならよほどのことが無い限りアップデートはしないほうがいいです。戻せなくなるし。

今回はvisual studio 2017でむりやりビルドして回避した。
.net 以前の古い技術のチェックや対応はゆるいんだろうなぁ。

Officeの完全アンインストール

https://support.office.com/ja-jp/article/pc-%e3%81%8b%e3%82%89-office-%e3%82%92%e3%82%a2%e3%83%b3%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=ja-JP&rs=ja-JP&ad=JPにアクセス。
・「オプション 2 – アンインストール サポート ツールを使用して Office を完全にアンインストールする」の項目を参照し、「ダウンロード」ボタンをクリックして、ファイルをダウンロードします。
・ダウンロードしたファイルをダブルクリックして実行し、Microsoft Officeを完全アンインストールします。
※アンインストール サポート ツール(Microsoft サポート/回復アシスタント)で問題が生じているアプリ>Officeを選択し、「Officeがインストールされていますが、アンインストールできません」を選択、続いてこれは問題が影響しているコンピューターですか?の問いに「はい」で進めます。
・PCを再起動します。
・2019年10月末現在、これだけでは完全なアンインストールにならないようなのでOffice を手動でアンインストールするを参照し、レジストリの削除を手動で行います。
・PCを再起動します。
・Microsoft Officeを再インストールします。

PHPで特定の文字列を含むか確認

正規表現を使わない場合はstrpos()を使う。

該当する文字列が見つかった位置を数値で返すので型までチェックする必要がある。そのため、===falseもしくは!==falseを使う。

if(strpos($subject,'bc') !== false){
  //'abcd'のなかに'bc'が含まれている場合
}

if(strpos($subject,'bc') === false){
  //'abcd'のなかに'bc'が含まれていない場合
}

html/cssでスクロールバー付きのボックスを表示する

overflow-x: scroll;で横スクロール、
overflow-y: scroll;で縦スクロールを指定。
width/heightでのサイズ指定も必要だよ

div.example1 {
width: 200px;
height: 100px;
white-space: nowrap;
overflow-x: scroll;
}

div.example2 {
width: 200px;
height: 100px;
overflow-y: scroll;
}