用php 解析execl 的問題? + 急急急急急急

來源:互聯網
上載者:User
PHP 解析execl

我php 解析execl 我用的是 php-excel-reader 工具 來解析的,但是 我現在的情況是這樣的
問題一:我在讀取execl 時發現讀取出來的 execl 裡面帶有星號( * ) ,所以在存入資料庫時,也是
有星號的,我想的辦法是 將讀取出來的星號,用空格代替,但是在存入資料庫時,還是不行,不知道是不是我
的替代的位置寫的不對。。

問題二:重點
客戶給出的execl 裡面分上下2 部分,上面 是一張表中的資料,下面是另一張表中的資料,所以就是下解析這兒execl 時,要將這execl 上面的資料 對應的存到對應的表中,下面的內容,存到對應的表中,就是說

execl :

上面 :A 表的內容

下面 :B 表的內容

現在要將execl 裡面解析到的資料 ,對應的存入到對應的表中。。


回複討論(解決方案)

沒有人朋友知道的。忘指點

不會用php解析excel

不過如果急著用的話,又如果客戶給出的excel表數量很有限的話

可以用navicat這個軟體直接將表存入資料庫 然後再用PHP來操作

我之前就是這樣做的,繞開了自己不明白的地方.... 雖然對技術提升不利但是對於追求結果來說挺有效...

另:navicat的匯入功能很強大......

1)你通過PHP讀取excel資料,除去表頭的一行資料,那剩下的就是實際資料,根據判斷是否有*號,替換就可。
2)你可以將上下表的內容分別儲存到兩個不同的excel中,分別讀取資訊即可。

回複 3 樓 的朋友,您給出的第1分方法是對的,正解, 第2個方法,將他們分成2個execl ,這樣主要是客戶部同意,說用軟體就是簡化操作,這樣跟沒有有什麼區別。。我只能在想其他辦法了。。。謝謝

回複 2 樓的朋友, navicat這個是 mysql 的一個開發工具,我是要將execl 上傳後再存入資料庫的,你給出的這個方法不是很好。。謝謝

第二個問題,最好的辦法是一個sheet儲存一個表的資料,這樣匯入時比較容易解釋。如果實在要在一個sheet裡儲存兩個表的資料,那麼也可以定義好分隔條件(比如兩個表中間空開2行),然後迴圈處理行,判斷行是否分隔行,分隔行後的就是第二個表的資料了。

回複 6 樓 ,恩,您的這個想法還是不錯了,我考慮下,在寫代碼。。謝謝


效果是這樣的 :當迴圈到 9920000 (河南省小計) 這裡就停止了,因為不能將這條資料插入到資料庫裡面,應該是到這裡就終止,並跳到下一次迴圈。我使用了break; ,continue; 這2個退出迴圈,都是將空值插入到資料庫裡面了。求我哪裡寫錯了,我這裡寫的是迴圈 【 月銷售計劃 】這列,當到 9920000 就應該停止。


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

}
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(), '
';}
A : 4650000
B : 2480000
C : 2790000
D : 8370000
E : 2790000
F : 26660000

應該能看明白吧?!

11 樓的兄弟,我有點不明白, 您用的是什麼工具phpexecl 嗎??,我用的是excel_reader2.php 這個檔案,phpexecl 我剛才下載了個1.7.9 版本的,我用我的 excel_reader2.php 不行 ,現在用phpexecl1.7.9版本運行您的代碼,效果是這樣的,如,裡面沒有資料,

11樓的朋友, 通過 echo $sheet->getCell("B$i")->getValue() 能取出對應的值,但是跟小計,跳過有什麼關係,我沒明白。。忘 指點。。

西氣東輸天然氣購銷日報表 :
報表日期:5月27日8時至5月28日8時 :
銷氣量(Nm3) :
使用者名稱稱 :
月銷售計劃1 : 河 南 省
46500002 :
24800003 :
2790000河南省小計 :
=SUM(E5:E7)1 : 安 徽 省
83700002 :
27900003 :
26660000安徽省小計 :
=SUM(E9:E11)1 : 江 蘇 省

11 樓的兄弟, 我在裡面加了一句輸出的 語句 echo $sheet->getCell("E$i")->getValue()."
";

這裡可能會出現一種情況,就是 月銷售計劃裡面的 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();//儲存讀到的資料
$cols;//列座標 eg:A,B,C......。phpexcel有提供方法獲得
$totalLine;//總行數,phpexcel有提供方法獲得
$line=1;
for($line ;$line<=$totalLine ;$line++){
$row=array();//一行資料
foreach($cols as $col){
$coor=$col.$line;//座標 eg:A1,B1,C1.....
$value;//通過phpexcel提供的方法拿到的對應$coor的值
if(preg_match('/小計/',$value)){//此處做判斷,
break; //如果讀到“小計”則換行
}else{
$row[]=$value;
}
}
$data[$line]=$row;
}

//接下來把$data儲存進資料庫就ok了








恩,謝謝,我在試試

這麼規則的excel表格,怎麼不好讀取了。如果怕直接插入有問題,可以將迴圈出來的數組存數組,手動篩除不需要的資料,避免邏輯判斷(什麼時候跳出迴圈。。),基本上也就很快搞定了。

28 樓 的朋友 手動篩選?? 不是很裡面, 我不會是讀取出來後,在讓客戶區篩選哪些存資料庫吧,這樣客戶會不爽的。。

當讀取到小計一行跳過啊··· 合并過的又不規則,要嗎你轉成cvs好很多

· 合并過的又不規則,要嗎你轉成cvs好很多???? 為什麼要轉成cvs 的?轉成cvs 的就沒有了嗎?我是想,判斷如果讀到合計這樣的字樣就跳過。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.