ホームページ  >  記事  >  バックエンド開発  >  PHP での execl の解析に問題がありますか? + 緊急、緊急、緊急、緊急

PHP での execl の解析に問題がありますか? + 緊急、緊急、緊急、緊急

WBOY
WBOYオリジナル
2016-06-23 14:16:51894ブラウズ

PHP の execl 解析

php-excel-reader ツールを使用して execl を解析していますが、現在の状況は次のようなものです
質問 1: execl を読み込むと、読み込まれた execl にアスタリスク ( * ) が含まれていることがわかりました。データベースに保存されるときは、読み取りアスタリスクをスペースに置き換えることも考えられますが、それはまだ機能しません。
の置換位置を間違って書いていませんか? 。

質問 2: 重要なポイント
お客様から提供された execl は上部と下部に分かれており、上部は 1 つのテーブルのデータであり、下部は別のテーブルのデータです。 、execl の上のデータは対応するテーブルに保存する必要があります。次の内容が対応するテーブルに保存されます。つまり、

execl :

上: テーブル A の内容

下: テーブル A の内容table B

次に、execl のコンテンツを解析する必要があります。データは、それに応じて対応するテーブルに保存されます。 。

ディスカッションへの返信(解決策)

誰も、または友人は知りません。アドバイスするのを忘れていました

PHP を使用して Excel を解析する方法がわかりません


しかし、急いでいる場合や、顧客から提供された Excel テーブルの数が非常に限られている場合は

ソフトウェア navicat を使用して、テーブルをデータベースに直接保存して、PHPで操作する

以前、分からないところを回避してやりました... 技術向上には向いていませんが、成果を追求するにはかなり有効です。

もう 1 つ: navicat のインポート機能は非常に強力です... ...

1) PHP を通じて Excel データを読み取り、ヘッダー内のデータ行を削除すると、残ったデータを実際のデータに置き換えることができます。 * 記号があるかどうかに基づいて判断されます。

2) 上下の表の​​内容を 2 つの異なる Excel に保存し、情報を別々に読み取ることができます。

あなたが挙げた最初の方法は正しいです。正しい答えは、2 つの execl に分割することです。これは主に、ソフトウェアを使用することで処理を簡素化することに顧客部門が同意しているためです。動作は同じです。違いはありません。 。他の選択肢しか思いつきません。 。 。ありがとうございます

2階の友人に返信します。navicatはmysqlの開発ツールです。execlをアップロードしてデータベースに保存したいのですが、教えていただいた方法はあまり良くありません。 。ありがとうございます

2番目の質問、インポート時に説明しやすいように、1つのテーブルのデータを1つのシートに保存するのが最善の方法です。 2 つのテーブルのデータを 1 つのシートに保存したい場合は、分割条件 (たとえば、2 つのテーブルの間の 2 行を空白のままにする) を定義し、ループで行を処理して行が保存されているかどうかを判断することもできます。分離された行は、2 つのテーブルのデータが失われています。

Floor 6 への返信、そうですね、あなたのアイデアはとても良いですね、検討してコードを書きます。 。ありがとうございます

効果は次のとおりです。ループが 9920000 (河南省の小​​計) に達すると、このデータをデータベースに挿入できないため、ここで終了し、次のループにジャンプします。これら 2 つの終了ループは、いずれもデータベースに null 値を挿入します。どこを間違えたのか教えてください。ここで書いたのは、周期的な[月間売上計画]の欄で、9920000になったら停止するはずです。


if($month_sales_plan=$data->sheets[0]['cells'][8][2]){
$month_sales_plan;
echo $month_sales_plan
}
else{
$ month_sales_plan=$data; ->sheets[0]['cells'][$i][5];
}

コードがわかりません。 提案: インポートされた Excel テーブルは指定された形式である必要があります。この形式は次のとおりです。プログラムによって解釈可能であり、プログラム内で必要なデータに解釈できます。

実際、私の要件は次のとおりです。8 階の図を参照してください。つまり、ループが小計や合計などのフィールドに遭遇すると、スキップされてループが続行されます。 。サイクルの終わりまで。

つまり、コードもデータファイルも与えられていません

例を挙げなければなりません

$PHPExcel = new PHPExcel_Reader_Excel5();$sheet = $PHPExcel->load('test1.xls')->getActiveSheet();$allRow = $sheet->getHighestRow();for($i=1; $i<=$allRow; $i++) {  if($sheet->getCell("B$i")->getValue() != '')     echo $sheet->getCell("B$i")->getValue() . ' : ' . $sheet->getCell("C$i")->getValue(), '<br>';}
A : 4650000
B : 2480000
C : 2790000
D : 8370000
E : 2790000
F : 26660000

そうあるべきです理解できますか? !

11階のお兄さん、phpexeclって何のツールを使っているんですか? ? 、ファイルexcel_reader2.phpを使用していますが、phpexeclの1.7.9バージョンをダウンロードしました。今はphpexecl1.7.9バージョンを使用してコードを実行しています。以下に示すように、そこにはデータがありません。

11 階の友人、echo $sheet->getCell("B$i")->getValue() を通じて対応する値を取得できますが、小計とスキップと何の関係があるのですか?わかりません。 。アドバイスするのを忘れていました。 。

東西ガスパイプラインからの天然ガスの売買に関する日次レポート:
レポート日付: 5 月 27 日 8:00 ~ 5 月 28 日 8:00:
ガス販売量 (Nm3):
ユーザー名:
月間売上計画1: 河南省
46500002:
24800003:
2790000河南省 小計:
=SUM(E5:E7)1: 安徽省
83700002:
27900003:
2666000 0安徽省の小計:
=SUM(E9:E11)1 : 江蘇省保存

11 階の兄弟、出力ステートメント echo $sheet->getCell("E$i")->getValue()."076402276aae5dbec7f672f8f4e5cc81";

Here There を追加しました。月次売上計画の4650000、2480000、2790000はexeclごとに内容が異なる可能性があるため、$sheet->getCell("E$i")->getValue()に従って取得します。間違いなく不正確なので、小計や =SUM などの単語に基づいて判断するのが最善の方法です。つまり、そのような単語に関しては、スキップしてサイクルを続行する方法がわかりません。機能しないと書きました。 。

効果:
月間販売計画
4650000
2480000
2790000
=SUM(E5:E7)
8370000
2790000
26660000
=SUM( E9:E11)
4650000
15500000
8680000
6200000
310000
2790000
3720000
4030000
3100000
4960000
2170000
1550000
2480000
3720000
1550000
=SUM(E13:E27)
6200000
6200000
4650000
4650000
1240000
1240000
=SUM(E8,E12,E28,E30,E32, E34)

読み取る具体的な列は、execl ファイルによって異なります
見ていないので、言うのは難しいです

いや、この判定文の書き方がわかりません。 。

11 階の兄弟、この execl を見てください。execl 内のすべての小計行がデータベースに保存されないようにする方法はありますか?

execl を解析する関数を探しています。そのような execl が表示されるように、 SUM(J9 :J11) 、何をするか、対応する特定の値に変換する方法。 。お願いします

execl で SUM のような関数を使用すると、解析結果は次の図のようになります

PHP マスターに来て解決策を尋ねることはできますか? ありがとうございます

execl ファイルを公開してください。ネットワークに接続して共有してください

22 階の友人、アップロードしました。ウェブサイトは http://download.csdn.net/my です

22 階の友人、[リソース] にアップロードしました、助けてください見てみると、なぜ解析された関数になるのかわかりません。数字の代わりに、

まだ誰も私に返信しません

11 階の兄弟、この execl を見てください。execl 内のすべての小計行がデータベースに保存されないようにするにはどうすればよいですか

$data=array();//Save読み取りデータ
$cols;//列座標 例: A、B、C…。 phpexcel は
$totalLine;// 合計行数を取得するメソッドを提供します。 phpexcel は
$line=1; for($line ;$line //データ行は Foreach ($ COLS AS $ Col) {
$ Coor = $ color. $ LINE; // 座標 EG: A1, B1, C1 .....
$ value; $ coor
if (preg_match ('/small meter/', $ value)) {// ここで判断します
Break; // 「小さなスキーム」を読んだ場合は行を変更します } else {
$row[ ]=$value;








そうですね、試してみます

このような通常の Excel テーブルを読み取るのはなぜ難しいのでしょうか?直接挿入による問題が心配な場合は、ループされた配列を配列に格納し、論理的な判断 (ループから抜け出すタイミングなど) を回避するために不要なデータを手動で除外することができ、基本的にはすぐに完了します。

28階の友達 手動でフィルターしますか? ?これはあまり内部的なものではありません。これを読み取った後、データベースに保存するものをクライアント領域でフィルタリングすることはできません。これはクライアントを不快にさせます。 。

小計の行を読み込むときはスキップしてください... マージされたものは不規則なので、CV に変換した方がはるかに良くなります

· マージされたものは不規則なので、次のようにするとさらに良くなります。 Cv に変換するのはなぜですか?? CVSに変換するようなことはありませんか?判決文に「合計」という言葉を読むと読み飛ばしたくなる。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。