音楽に関する話題、プログラムに関する話題、ジョギングに関する話題、後は日々気になったことを綴っていきます。
ザ☆ミュージシャンズ・プログラマー - Exploring Music & Programming -



<head><script type="text/javascript" src="/blog/scripts/shCore.js"></script><script type="text/javascript" src="/blog/scripts/shLegacy.js"></script><script type="text/javascript" src="/blog/scripts/shAutoloader.js"></script><script type="text/javascript" src="/blog/scripts/shBrushXml.js"></script><script type="text/javascript" src="/blog/scripts/shBrushCss.js"></script><script type="text/javascript" src="/blog/scripts/shBrushJScript.js"></script><script type="text/javascript" src="/blog/scripts/shBrushPerl.js"></script><script type="text/javascript" src="/blog/scripts/shBrushPhp.js"></script><script type="text/javascript" src="/blog/scripts/shBrushPython.js"></script><script type="text/javascript" src="/blog/scripts/shBrushRuby.js"></script><script type="text/javascript" src="/blog/scripts/shBrushPowerShell.js"></script><script type="text/javascript" src="/blog/scripts/shBrushBash.js"></script><script type="text/javascript" src="/blog/scripts/shBrushSql.js"></script><script type="text/javascript" src="/blog/scripts/shBrushVb.js"></script><script type="text/javascript" src="/blog/scripts/shBrushPlain.js"></script><link type="text/css" rel="stylesheet" href="/blog/styles/shCore.css"/><link type="text/css" rel="stylesheet" href="/blog/styles/shCoreDefault.css"/><script type="text/javascript">SyntaxHighlighter.config.tagName = "code";SyntaxHighlighter.config.stripBrs=true;SyntaxHighlighter.config.bloggerMode=true;SyntaxHighlighter.all();</script></head>
只今、某所から業務構築の話をもらっています。
簡単に言うと、発注データ、納品データ、出荷データをCSVとしてデータ管理するというものです。
インプットがCSVの生データだけではなく、ExcelやPDFも対象とします。
おそらくLAMP(PはPHPね)環境だと思われるので、PHPでExcelとPDFが処理できるかを試してみました。
PHPのExcelのモジュールとしてPHPExcelを試してみました。

試した環境は以下の通りです。

Linux:CentOS release 5.4 (Final)
Apache:Apache/2.2.22
MySQL:14.12
PHP:5.3.14

PHPExcelというモジュールがあったので、それようにPHPをリコンパイルしました。

# =========================
# phpコンフィグレーション
# =========================
./configure \
  --with-apxs2=/usr/local/apache2/bin/apxs \
  --with-mysql \
  --enable-sqlite-utf8 \
  --with-sqlite \
  --enable-mbstring \
  --enable-calendar \
  --enable-zend-multibyte \
  --with-oci8=shared,instantclient,/usr/local/lib/instantclient_11_2,11.2.0 \
  --with-pdo-oci=shared,instantclient,/usr/local/lib/instantclient_11_2,11.2.0 \
  --with-curl \
  --enable-zip \
  --with-gd \
  --with-jpeg-dir \
  --with-freetype-dir \
  --with-png-dir \
  --with-xpm-dir


PHPはPHPExcelで決まりですね。

Excel_Reviserというのもありましたが、動作しませんでした。
業務の仕様としては、Excelのバージョンは2000(拡張子がxls)~2010(拡張子がxlsx)ということで、
PHPExcelは意外と大丈夫でした。

# ====================
# PHPExcelのサンプル
# 参考:PHPExcelでExcel2000/XP形式のファイルをつくる
# ====================

require_once 'PHPExcel.php';
require_once 'PHPExcel/Writer/Excel5.php';
# Excelオブジェクト生成
$excel = new PHPExcel();
$excel->setActiveSheetIndex(0);
# セルの内容を変更
function setExcelData(&$sheet, $col, $row, $data)
{
  $sheet->setCellValue($col.$row, $data);
  $sheet->getColumnDimension($col)->setAutoSize(true);
  $style = $sheet->getStyle($col.$row);
  $style->getFont()->setName('MS Gothic');
  $style->getBorders()->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
  $style->getBorders()->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
  $style->getBorders()->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
  $style->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
  $style->getFill()->getStartColor()->setARGB('FF808080');
}
# 現在のシートを取得し、シート名を変更する(オリジナル)
$excel->getActiveSheet()->setTitle('これはテストです(-∀-)');
$sheet = $excel->getActiveSheet();
$row = 1;
setExcelData($sheet, 'A', $row, '名前');
setExcelData($sheet, 'B', $row, 'フリガナ');
$row++;
setExcelData($sheet, 'A', $row, '鈴木一郎');
setExcelData($sheet, 'B', $row, 'スズキイチロウ');
$row++;
setExcelData($sheet, 'A', $row, '田中太郎');
setExcelData($sheet, 'B', $row, 'タナカタロウ');
# 保存先定義
$savefile = 'list_'.date('Ymd').'.xls';
$savepath = '/tmp/';
# Excel2007より前の形式で保存する
$writer = new PHPExcel_Writer_Excel5($excel);
$writer->save($savepath.$savefile);
# ダウンロード
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=${savefile}");
header("Content-Length: ".filesize($savepath.$savefile));
# 出力
readfile($savepath.$savefile);
exit;


PDFはというと、PHPのモジュールとしては見つけることができませんでした。
いろいろと探した挙句、xpdfにたどり着きました。
とはいえ、pdftocsvなどはないので、pdftotextで代用するしかなく、コマンドラインでCSVの抽出ということになりそうです。
Xpdfのサイトはこちらです。

実験はこんなんで。
# =========================
# PDFTOTEXTのサンプル
# =========================




コメント ( 0 ) | Trackback ( )
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




今日は変な夢を見ました。
詳細は忘れましたが、知らない奴が人の鞄をサッカーボールのように蹴ってたので、
注意をしました。
するとそいつがいきなり回し蹴りをしてきたので、応戦するためにこちらもカウンターで
回し蹴りをお見舞いしました。
そこで目が冷めました。
机の上の足を乗っけてたので、机の上のものが散乱していました。
陶器の急須の柄が折れていたり、悲しいことに大事な鼈甲の眼鏡が真っ二つになってました。。。
ついでに、机の横の柱を思いっきり蹴ったみたいで、足がちょー痛い。。。

あの夢はなんなんだろう。

意味不明です。



コメント ( 0 ) | Trackback ( )
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする