Translate

2016年1月20日水曜日

【php】エクセルをコピペして配列に収納

csv経由で一括とかではなく、エクセルの内容をDBなどに入れたい場合、
エクセルの内容を入力フォームにペーストすると、
セルごとにtabで区切られたテキストが表示される。
これをそのままフォームへpostしたと仮定して、受け側のプログラム。
条件として、
○コピペする列の数は決まっている
○最後の列に改行記号が入っていない
とします。

$contents = $_POST["contents"];//これがフォームの内容
$celllength = 10;//一行あたりのセルの数を決めておく
$masterarray =[];//目標となる配列。ここに全て入れたい。
$count =0;

$array = explode("\t", $contents);//とりあえず全てtabで区切る

foreach ($array as $key => $value) {
   if($count % ($celllength-1) ==0 &&$count>0)//最後の列は次の行の最初の列とくっついているので、改行記号で分ける。
   {
      $masterarray[]=explode("\n",$value)[0];
      $masterarray[]=explode("\n",$value)[1];
   }
   else {
      $masterarray[]=$value;
   }
   $count++;
}
if(count($masterarray) > $celllength)
{
   array_pop($masterarray);//最後の行の最後の列を二つにしてしまったので、削除しておく
}

if(count($masterarray) % $celllength !=0 )//postされたセルの数が正しいか確認
{
   echo "error:セルの数が不正です。エクセルの選択範囲を見直してください。";
   die;
}

foreach ($masterarray as $key => $value) {
   echo $key.":".$value."\r";//debug
}

後はお好きに。$masterarrayは連想配列にしてあげたほうが使いやすいですね。

0 件のコメント:

コメントを投稿