Laravel-excel: Laravel 4.2 / Laravel-Excel 1.3テキストずしおフォヌマットされた数倀はただ数倀ずしお衚瀺されたす

䜜成日 2015幎12月03日  Â·  38コメント  Â·  ゜ヌス: Maatwebsite/Laravel-Excel

私はこれを数日間遊んでいたすが、単にそれを機胜させるこずができたせん。 デヌタベヌスにいく぀かの長い数字16桁が保存されおおり、toArray関数を䜿甚しおxlsxExcelスプレッドシヌトを䜜成しおいたす。 列のフォヌマットに䜿甚しおいるコヌド
$sheet->setColumnFormat(array( 'A' => '@' ));

ただし、数倀はExcelで数倀ずしお衚瀺されおおり、科孊的蚘数法で短瞮されおいたす。

䞡偎にスペヌスを远加する以倖に、これに぀いお䜕かできるこずはありたすか

私はExcelの15桁の制限を知っおいたすが、テキストずしおフォヌマットするずき、これは問題ではないず信じるようになりたした。

最も参考になるコメント

$ excel-> sheet 'staff'、function$ sheetuse$ data{
$ sheet-> setColumnFormatarray
'H' => '@'、
;
$ sheet-> rows$ data、true;
};

お圹に立おれば ;

党おのコメント38件

ここでも同じ問題がありたすが、私の堎合は14桁の文字列です。

Excelで長い数倀の科孊的蚘数法を避けたい堎合は、それらの倀を数倀ずしお明瀺的に衚瀺するフォヌマットマスクを蚭定する必芁がありたす..... @を䜿甚するず、MSExcelにデフォルトの動䜜を䜿甚するように指瀺するだけです。 これは、より長い数倀には科孊的フォヌマットを䜿甚するこずです...代わりに#0フォヌマットマスクを䜿甚するこずをお勧めしたす

それでも機胜しおいたせん。 これは私が詊したものです$ sheet-> setColumnFormat['id' => '0'];。 たた、いく぀かの圢匏を詊したが、実際には列圢匏に圱響を䞎えなかったため、setColumnFormatはCSVではうたく機胜しないず思われたす。

これが違いを生むかどうかはわかりたせんが、私は$ sheet-> fromModel$ result;を䜿甚しおいたす。 $ sheet-> fromArray$ result-> toArrayを詊したしたが、どちらもこの問題が発生したした。

CSVでこの問題が発生する堎合は、次のメ゜ッドを䜜成したした。

パブリック関数getStringIdAttribute
{{
return '= "'。$ this-> id。 '"';
}
モデルの䞊郚に次のように远加したした。
保護された$ appends = ['string_id'];

そのため、ExcelおよびKingsoft Spreadsheetsに数倀がテキストずしお衚瀺されたした。

CSVに曞き蟌んでExcelで衚瀺しおいる堎合、CSVはフォヌマットマスクを保存せず、Excelはデフォルトのフォヌマットを䜿甚しお結果を数倀ずしお衚瀺したす倀が倧きい堎合は科孊的です.....垞にを䜿甚しおCSVを確認しおくださいテキスト゚ディタ

列圢匏ずしお「0」を䜿甚しおファむルを゚クスポヌトしようずしたしたが、最埌の桁が0に倉換されたす。@が「デフォルト」の識別子である堎合、Excelが䜕にも觊れないように、セルを単なるテキストずしおリストするにはどうすればよいですか。 

珟圚、私の回避策はlaravel-excelからcsvずしお゚クスポヌトするこずです。次に、openpyxlがテキストずしお正しくフォヌマットできるように芋えるため、xlsxずしお゚クスポヌトするために䜜成したPythonスクリプトを䜿甚しおいたす。

この動䜜の修正はありたすか 「10E00」のような文字列がExcelで番号「10」ずしお゚クスポヌトされおいる配列からXSLXに゚クスポヌトしおいたす。 setColumnFormat "@"が機胜したせん...

@lachyn䞊で述べたように、最終的に䜿甚した回避策は、laravel CSVから゚クスポヌトしおから、シェルコマンドを実行しおPythonスクリプトで出力をxlsxに倉換するこずでした。

@lszantoですが、これは奇劙です。「CSV」に゚クスポヌトしおも、「10E00」ではなく「10」の倀があり、配列には文字列「10E00」があるず確信しおいたす。

@lachyn䜕でCSVを開きたすか それが単なるテキスト゚ディタである堎合、CSVは単なる生の出力であり、修食子などはないため、laravelは他の䜕かに觊れおいる可胜性がありたす。

必芁に応じおデヌタが非公開でない堎合は、サンプルを投皿できたす。機䌚があれば詊しおみたす。

@lszanto厇高なテキスト゚ディタ...
最埌にtoArrayでク゚リを実行しおいたす。 この配列をダンプするず、゚クスポヌト埌に「10E00」が衚瀺されたす...「10」。 ゚クスポヌトはこの配列から実行されるため、すべおのミュヌテヌタヌはク゚リで実行されたす。したがっお、゚クスポヌト䞭に倉曎する必芁がありたす。

@lszantoおそらく私はこの問題の原因を芋぀けたした。 ゚クスポヌトからヘッダヌ行を削陀した堎合

  $sheet->prependRow(..)

期埅どおりに動䜜しおいるので、おそらくこの関数はフォヌマットを壊したす。 モデルたたは配列からシヌトを生成しようずしたしたが、同じ結果です。

Excel::create('sklad_vyrobku-'.date('d-m-Y', time()), function($excel) use ($table) {
            $excel->sheet('Sklad vyrobku k '.date('d-m-Y', time()), function($sheet) use ($table) {                                         
                 $sheet->fromModel($table, null, 'A1', false, false);
                     $sheet->prependRow(array('id','kod','...'));
                 $sheet->setColumnFormat(array('B'=>'@','C'=>'@','D'=>'@','E'=>'@'));
            });
         })->download('xlsx');

同じ問題Laravel 4.2がありたしたが、$ excel- > sheet関数クロヌゞャを開いた盎埌に
したがっお、これはバグではなく、単なる論理的なアプロヌチだず思いたす。

䟋

$excel->sheet("FooBar", function($sheet) use ($x, $y, $z) {

    $sheet->setColumnFormat(array(
       "G:H" => "@",
       "Z" => "@",
       'AH:AI' => '0',
       "AO:BB" => "h:mm",
       "BE:BR" => "h:mm",
    ));

    ...

});

私はただこの問題を抱えおいたした、そしお䞊蚘の解決策のどれも私のために働きたせんでした。 配列からデヌタをむンポヌトしおいたしたが、そこにあるすべおの倀はstrings 、 setColumnFormatは匕き続きその圹割を果たし、セルをNumber Formatに倉換するず考えおいたした。しかし、そうではありたせんでした。
私が解決した方法は、 fromArrayメ゜ッドを䜿甚しおデヌタをシヌトにむンポヌトする前に、配列内のすべおの倀をfloat / intsに型キャストするこずです。

したがっお、䜕も機胜しない堎合は、むンポヌトするデヌタが正しいタむプであるこずを確認しおから、シヌトに挿入しおください。 これが誰かに圹立぀こずを願っおいたす:)

setCellValueExplicitを䜿甚しお回避策を芋぀けたした
䟋えば

$sheet->setColumnFormat(array( //se formatea la columna a texto
    'C' => \PHPExcel_Style_NumberFormat::FORMAT_TEXT,
    'I' => 'dd-mm-yyyy hh:mm'
));

$sheet->setCellValueExplicit('C10', $object->card_number, \PHPExcel_Cell_DataType::TYPE_STRING);

お圹に立おれば ;

$ excel-> sheet 'staff'、function$ sheetuse$ data{
$ sheet-> setColumnFormatarray
'H' => '@'、
;
$ sheet-> rows$ data、true;
};

お圹に立おれば ;

私はただ同じ問題を抱えおいたす。 実際、フォヌマットフォントは倉曎されたすが、デヌタフォヌマットは倉曎されたせん。
captura de pantalla 2017-04-04 a las 11 11 39 a m
captura de pantalla 2017-04-04 a las 11 05 19 a m
captura de pantalla 2017-04-04 a las 11 12 58 a m

バグですか、それずも間違った方法でやっおいたすか

@minkadev
$sheet->rows($data, true)は、すべおのルヌルを「明瀺的」に远加したす。 これは、文字列ずしお远加されるため、列の曞匏蚭定が無芖されるこずを意味したす。

@patrickbrouwersに感謝したす。
私も詊しおみたす

$sheet->fromArray($data, null, 'A1', false, false);

なぜそれが機胜しないのか、なぜ远加されたのかわからないこずがわかったず思いたす //github.com/Maatwebsite/Laravel-Excel/blob/2.1/src/Maatwebsite/Excel/Classes/LaravelExcelWorksheet.php#L1262 It数倀ず敎数も「文字列」倀ずしお远加したす。

それで、それは機胜したせんか :(

明瀺的な$sheet->rows($data, true);をtrueに蚭定しないでください。

䜿甚する

$sheet->rows($data);

$sheet->fromArray($data, null, 'A1', false, false);は私にずっおも問題なく動䜜したす。

ただ動かない。 さらに、以䞋を䜿甚しお列をフォヌマットするにはどうすればよいですか
$sheet->fromArray($data, null, 'A1', false, false);

$sheet->rows($data);䜿甚したサンプルコヌドは、私にずっおは問題なく機胜したす。 Excelで開いたずきの列の曞匏は正しいです。

それは倉だ。 ただ動かない
captura de pantalla 2017-04-05 a las 11 15 20 a m
captura de pantalla 2017-04-05 a las 11 13 48 a m
私は正しいバヌゞョンを持っおいたすか v2.1.16

誰か..私はただこの問題を抱えおいたす...

Laravel 5.3では、maatwebsite / excel 2.1.12

次の2぀の倉曎で動䜜させるこずができたした

  1. 数倀をfloatたたはintにキャストする
  2. @ nikola-absoluteに埓っお、$ excel-> sheet関数クロヌゞャを開いた盎埌にsetColumnFormatを配眮したす

最近この問題が発生したした。 setColumnFormatメ゜ッドを䜿甚しようずしたしたが、うたくいきたせん。
これが私の回避策です

foreach (...) {
    $sheet->row($row, [
        /* Your Data */
    ]);
    $sheet->setCellValueExplicitByColumnAndRow($column, $row, $value, \PHPExcel_Cell_DataType::TYPE_STRING);
}

ノヌトの皮類$columnず$rowでinteger 、参照ここ。

Laravel 5.1では、maatwebsite / excel2.1.0
数倀をfloatたたはintにキャストするだけで機胜させるこずができたした
:(
したがっお、それを実珟するには、すべおの行をルヌプする必芁がありたす。

たた、この問題が発生しおいたす。 曎新はありたすか

線集修正されたばかりで、@ neighborhood999の回避策もありたす

ここにあるすべおのサンプルは、Excelぞの゚クスポヌトに぀いお説明しおいたす。Excelサンプルからのむンポヌトはどうですか

倀-> imei_1 = 356803081142590;

しかし、私は「3.5680308104231E +14」ずしおimei_1を取埗するこずになりたす

<?php

$path = $request->file('excel')->getRealPath();
$data = Excel::load($path, function ($reader) {
})->get(['brand', 'model', 'batch', 'imei_1', 'imei_2']);

if (!empty($data) && $total = $data->count()) {
    foreach ($data as $key => $value) {
              $insert[] = ['brand' => $value->brand,
                           'model' => $value->model,
                           'batch' => $request->batch ? $request->batch : $value->batch,
                           'imei_1' => strval($value->imei_1),
                           'imei_2' => strval($value->imei_2),
                           'created_at' => Carbon::now(),
                           'updated_at' => Carbon::now()
                         ];
        }
    /*if (!empty($insert)) {
        Device::insert($insert);
        // dd('Insert Record successfully.');
    }*/
}

@ Ra1da35ma同じ問題が発生しおいたす。 これでどこにでも行きたしたか

カスタム倀バむンダヌを蚭定しようずしたしたが、セルにバむンドされおいる倀がすでに科孊的蚘数法になっおいるため、機胜したせん。 これは厳密には同じ問題ではないので、別の問題を開いおこれを解決しようずするかもしれたせんが、もっず情報があればいいのですが。

修正を芋぀けたした。 問題は、PHPず、PHPExcel_Calculationクラスによっお読み取られるその粟床の.ini倉数に関係しおいたした。 Laravel-Excelパッケヌゞでも、実際にはその芪パッケヌゞPHPExcelでも、これをオヌバヌラむドするこずはできたせん。 代わりに、これを修正するために、Excelの読み蟌み関数を呌び出す前にini_set('precision', 20)远加したした。

これは私の機胜です

public function getXlsxFile($filePath)
    {
        ini_set('precision', 18);
        $collection = Excel::load($filePath);

        return $collection->get();
    }

これがlaravel5.1での私にずっおの仕組みです

$ myFile = Excel :: create$ filename、function$ exceluse$ array{
$ excel-> setTitle 'title';
$ excel-> sheet 'sheet 1'、function$ sheetuse$ array{
$ sheet-> setColumnFormatarray 'B' => '0';
$ sheet-> setColumnFormatarray 'C' => '0';
$ sheet-> setColumnFormatarray 'D' => '0';
$ sheet-> setColumnFormatarray 'E' => '0';
$ sheet-> rows$ array、false;
//列名を蚭定したす
$ sheet-> appendRowarray
「列名1」、「ボックス1」、「ボックス2」、「ボックス3」、「合蚈」
;
};
};

バヌゞョン2. *がサポヌト終了段階に達しおいるため、すべおの叀いチケットを閉鎖したす。 珟圚、私たちの完党な泚意はバヌゞョン3.0に割り圓おられおいたす。 2. *を䜿甚するこずは匕き続き可胜ですが、アクティブなサポヌトはなくなりたす。

倀を敎数にキャストするこずは私のために働いた。

これが最良の答えです。倉数を->fromArrayメ゜ッドに枡す前に、配列に型キャストしたす。䟋
$local_order['Quantity'] = (int) $item->quantity;
$local_order['Price'] = (float) $item->price;

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡