Laravel-Excelというのを見つけたので使ってみたのだが、いかんせんAS400だと色々と面倒くさい。
AS400はEBCDICという文字コードらしく、そこからODBCかPDOで引っ張ってきても、Shift-JISにしかならない。
一気にEBCDIC->UTF-8にすることはできない。とはいえ、ODBCで引っ張った時点でShift-JISになっている訳だから、それを変換してあげればいい。
$hensu = trim(mb_convert_encoding($hensu,’UTF-8′,’SJIS-win’));
それはいいのだが、これをどこに放り込むか。
ファイルはこれ、vender/phpoffice/phpexcel/Classes/PHPExcel/Cell/DefaultValueBinder.php
ここの5行目の前に入れてあげる。
public function bindValue(PHPExcel_Cell $cell, $value = null)
{
// sanitize UTF-8 strings
if (is_string($value)) {
$value = PHPExcel_Shared_String::SanitizeUTF8($value);
} elseif (is_object($value)) {
// Handle any objects that might be injected
if ($value instanceof DateTime) {
$value = $value->format('Y-m-d H:i:s');
} elseif (!($value instanceof PHPExcel_RichText)) {
$value = (string) $value;
}
}
// Set value explicit
$cell->setValueExplicit( $value, self::dataTypeForValue($value) );
// Done!
return true;
}
こんな感じで。
if (is_string($value)) {
//2バイト文字の文字化けを直す 2018/8/3 K.H
$value = trim(mb_convert_encoding($value,'UTF-8','SJIS-win'));
$value = PHPExcel_Shared_String::SanitizeUTF8($value);
} elseif (is_object($value)) {
これでOKみたい。今のところ問題は起きていない。


コメント