ホームページ  >  記事  >  バックエンド開発  >  phpexcel を使用してインポートする場合、現在 2 つのデータ形式の問題があります。

phpexcel を使用してインポートする場合、現在 2 つのデータ形式の問題があります。

WBOY
WBOYオリジナル
2016-06-23 13:58:131387ブラウズ

違法な表現がある、スクリーンショットしか撮れないと投稿してください


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

1 varchar 型を使用して保存できるため、number_format は必要ありません。
2. var_dump(); 変更があるかどうかを確認してください。

1 varchar 型を使用して保存できるため、number_format は必要ありません。
2. var_dump(); 変更があるかどうかを確認してください。



1: 出力は
string(19) "5.9335552883783E+14" です
varchar 型も 5.9335552883783E+14 として保存されますが、これは使用できません

2: 変更されません

コード分析用

include 'Plugin/PHPExcel/Classes/PHPExcel/IOFactory.php';$excel = PHPExcel_IOFactory::load('2.xls');$sheet = $excel->getActiveSheet();echo $sheet->getCell('A1')->getValue(), ' ', $sheet->getCell('A2')->getValue();
5.9335552883783E+14 41728.732916667

このような感じですが、どう対処すればよいでしょうか?
考えてから話しましょう

まずは時間の問題を解決しましょう

読み出される時間は日数です
Excel の日付は 1900-01-01 から計算されます (php は 1970-01-01 から計算されます) )
2 つの間には日数があります その差は 25569 です
時刻はグリニッジ標準時です
ということで

$d = 25569;$t = 24 * 60 * 60;echo gmdate('Y-m-d H:i:s', (41728.732916667 - $d) * $t);
2014-03-30 17:35:24

科学表記法の問題を解決します
echo $sheet- >getCell('A1')->getValue() ; //5.9335552883783E+14
echo $sheet->getCell('A1')->getFormattedValue(); //593355528837832

に変更します。これは日付には適していません
echo $sheet->getCell ('A2')->getFormattedValue();
3/30/14 17:35 を取得しました
まだ満足のいくものではありません

科学表記法の問題を解決してください

echo $sheet->getCell('A1')- >getValue(); //5.9335552883783E+14
echo $sheet->getCell('A1')->getFormattedValue(); に変更します。 /593355528837832

でも、これは日付には良くありません
echo $sheet->getCell('A2')->getFormattedValue();
3/30/14 17:35 を取得
まだ少し満足できません

時刻わかりました、科学的表記法は他にありますか?


getFormattedValue だけではありませんか?ほかに何か? 書式付き

getFormattedValueはExcelで見られる書式付きデータを読み込むものです

593355528837832自体はExcelでは5.9335552883783E+14と表示されます
593355528837832として表示したい場合はセルの書式を設定します


Excel ソリューションを使用して句読点を追加してみてくださいデジタル署名を指しますね?


getFormattedValue?ほかに何か?

書式付き

getFormattedValueはExcelで見られる書式付きデータを読み込むものです


593355528837832自体はExcelでは5.9335552883783E+14と表示されます
593355528837832として表示したい場合はセルの書式を設定します


うーん、私のコードはそうではないようですgetFormattedValue(); を使用できます

セルの形式を設定しようとしましたが、うまくいきませんでした

16 行目の兄弟の getValue() を getFormattedValue() に置き換えてください
さらに、大きな数値が mysql を超えていますint 型の表現範囲を超える場合は、vchar または blogint を使用する必要があります


16 行目の getValue() を getFormattedValue() に置き換えます

さらに、大きな数値は mysql int 型の表現範囲を超えているため、vchar を使用する必要がありますまたは blogint


16 行目を getFormattedValue() に変更しましたが、応答がありません

112 行目の show_dug のコメントを解除すると、$data、$res を出力する var_dump になります


all show
["order_number"]=>
string(19) "5.933555288 3783 E+14"

データ型はすでに varchar(25) です

Excel ファイルに関連している可能性があります
私のコードは #4 テクスチャ ダイアグラムに基づいています


Excel ファイルに関連している可能性があります

私のコードは #4 のテクスチャ図に基づいています

まさか、私の Excel はこんな感じです


xls ファイルをクラウドディスクに置くことができます、ほんの数行で十分です

你可以把你的 xls 文件放到云盘上,只要几行就可以了


好的哦
http://yunpan.cn/QNeRvzh56XrI6 (访问密码:a3ac)

你可以把你的 xls 文件放到云盘上,只要几行就可以了


php读取excel的时候把这数字当成了数值类型,有没有办法在读取的时候强制指定为字符串类型?

$excel = PHPExcel_IOFactory::load('test.xls');$sheet = $excel->getActiveSheet();$w = $sheet->getHighestColumn(); //取得最大的列号$h = $sheet->getHighestRow(); //取得一共有多少行for($x='A'; $x!=$w; $x++) {  $t = array();  for($y=1; $y<=$h; $y++) {    if($y == 1) $t['h'] = $sheet->getCell("$x$y")->getValue();    elseif(in_array($x, array('R', 'S'))) {      $d = $sheet->getCell("$x$y")->getValue();      $t['d'][] = $d ? gmdate('Y-m-d H:i:s', ($d - 25569) * 86400) : '';    }else $t['d'][] = $sheet->getCell("$x$y")->getFormattedValue();  }  $res[$x] = $t;}
Array(    [A] => Array        (            [h] => 订单编号            [d] => Array                (                    [0] => 593355528837832                    [1] => 593051520633446                    [2] => 592333520554850                    [3] => 592198001144245                    [4] => 592045929493597                )        )    [B] => Array        (            [h] => 买家会员名            [d] => Array                (                    [0] => wangfeilixin123                    [1] => 解玲9992                    [2] => 蒋小丫0415                    [3] => 吖呵呵18                    [4] => 雄19910105                )        )    [C] => Array        (            [h] => 买家支付宝账号            [d] => Array                (                    [0] => szxszglc@163.com                    [1] => 15956089992                    [2] => 13357122950                    [3] => 15147596696                    [4] => 18850173553                )        )    [D] => Array        (            [h] => 买家应付货款            [d] => Array                (                    [0] => 296                    [1] => 159                    [2] => 131.4                    [3] => 168                    [4] => 131.4                )        )    [E] => Array        (            [h] => 买家应付邮费            [d] => Array                (                    [0] => 12                    [1] => 0                    [2] => 0                    [3] => 0                    [4] => 0                )        )    [F] => Array        (            [h] => 买家支付积分            [d] => Array                (                    [0] => 0                    [1] => 49                    [2] => 0                    [3] => 0                    [4] => 0                )        )    [G] => Array        (            [h] => 总金额            [d] => Array                (                    [0] => 308                    [1] => 159                    [2] => 131.4                    [3] => 168                    [4] => 131.4                )        )    [H] => Array        (            [h] => 返点积分            [d] => Array                (                    [0] => 0                    [1] => 79                    [2] => 65                    [3] => 84                    [4] => 65                )        )    [I] => Array        (            [h] => 买家实际支付金额            [d] => Array                (                    [0] => 0                    [1] => 159                    [2] => 131.4                    [3] => 168                    [4] => 131.4                )        )    [J] => Array        (            [h] => 买家实际支付积分            [d] => Array                (                    [0] => 0                    [1] => 49                    [2] => 0                    [3] => 0                    [4] => 0                )        )    [K] => Array        (            [h] => 订单状态            [d] => Array                (                    [0] => 交易关闭                    [1] => 交易成功                    [2] => 交易成功                    [3] => 交易成功                    [4] => 交易成功                )        )    [L] => Array        (            [h] => 买家留言            [d] => Array                (                    [0] =>                     [1] =>                     [2] =>                     [3] => 申通就可以哦    要金色的链子                    [4] =>                 )        )    [M] => Array        (            [h] => 收货人姓名            [d] => Array                (                    [0] => 王飞                    [1] => 解玲                    [2] => 张勇                    [3] => 姜宁                    [4] => 许小云                )        )    [N] => Array        (            [h] => 收货地址             [d] => Array                (                    [0] => 辽宁省 葫芦岛市 绥中县 肖家菜市场东门王艳海鲜行(125200)                    [1] => 安徽省 滁州市 天长市 恒福花苑6号楼一单元602(239300)                    [2] => 浙江省 舟山市 普陀区 东港京汇广场5号楼丁哥黑鱼馆(316100)                    [3] => 内蒙古自治区 通辽市 开鲁县 开鲁镇邮局(028400)                    [4] => 天津 天津市 滨海新区 滨海新区大港学苑路600号天津国土资源和房屋职业学院(300270)                )        )    [O] => Array        (            [h] => 运送方式            [d] => Array                (                    [0] => 快递                    [1] => 快递                    [2] => 快递                    [3] => 快递                    [4] => 快递                )        )    [P] => Array        (            [h] => 联系电话             [d] => Array                (                    [0] =>                     [1] =>                     [2] =>                     [3] =>                     [4] =>                 )        )    [Q] => Array        (            [h] => 联系手机            [d] => Array                (                    [0] => 18204296511                    [1] => 15956089992                    [2] => 15906805620                    [3] => 15147596696                    [4] => 13321300935                )        )    [R] => Array        (            [h] => 订单创建时间            [d] => Array                (                    [0] => 2014-03-30 17:35:24                    [1] => 2014-03-30 14:12:14                    [2] => 2014-03-29 22:09:29                    [3] => 2014-03-29 20:52:17                    [4] => 2014-03-29 19:13:12                )        )    [S] => Array        (            [h] => 订单付款时间             [d] => Array                (                    [0] =>                     [1] => 2014-03-30 14:12:21                    [2] => 2014-03-29 22:09:36                    [3] => 2014-03-29 22:45:39                    [4] => 2014-03-29 21:14:35                )        )    [T] => Array        (            [h] => 宝贝标题             [d] => Array                (                    [0] =>                     [1] => 易? 天然和田白玉吊坠 龙 时尚男士吊坠纯银项链挂坠男 龙飞凤舞                    [2] => 情侣吊坠玉坠纯银项链一对 生日礼物 男女款 心心相印金镶玉吊坠                    [3] => 送男友生日礼物 天然黑曜石镶金龙吊坠 男士纯银项链龙挂坠项坠                    [4] => 情侣吊坠玉坠纯银项链一对 生日礼物 男女款 心心相印金镶玉吊坠                )        )    [U] => Array        (            [h] => 宝贝种类             [d] => Array                (                    [0] => 0                    [1] => 1                    [2] => 1                    [3] => 1                    [4] => 1                )        )    [V] => Array        (            [h] => 物流单号             [d] => Array                (                    [0] =>                     [1] => No:768333728128                    [2] => No:768333728127                    [3] => No:868031587631                    [4] => No:768333728126                )        )    [W] => Array        (            [h] => 物流公司            [d] => Array                (                    [0] =>                     [1] => 申通E物流                    [2] => 申通E物流                    [3] => 申通E物流                    [4] => 申通E物流                )        )    [X] => Array        (            [h] => 订单备注            [d] => Array                (                    [0] =>                     [1] =>                     [2] => 【土豆】                    [3] => 【土豆】刻字:姜松  金色链子 大概4月1号发货   不能有价格在里面  代写贺卡:亲爱的哥哥: 亲爱的哥哥加我最爱的哥哥 这是我送你的第一份礼物 也是最珍贵的一份礼物 我知道你一直想要一个吊坠 现在我没有钱给你买好的 只能买我的能力范围内的 不要给我乱花钱 也不要感动哦 做妹妹的只能以自己的方式爱你 虽然争吵不断 但这就是别人无法代替的亲情 将来的事情我们预料不到 但我一直坚信一点 你是我亲哥哥 我们之间的感情谁都破坏不掉 哥哥 我爱你                    [4] => 【土豆】金链子,写贺卡,内容关于生日的就可以,希望3月5号收到货 包装好点                )        )    [Y] => Array        (            [h] => 宝贝总数量            [d] => Array                (                    [0] => 0                    [1] => 1                    [2] => 1                    [3] => 1                    [4] => 1                )        )    [Z] => Array        (            [h] => 店铺Id            [d] => Array                (                    [0] => 0                    [1] => 0                    [2] => 0                    [3] => 0                    [4] => 0                )        )    [AA] => Array        (            [h] => 店铺名称            [d] => Array                (                    [0] =>                     [1] =>                     [2] =>                     [3] =>                     [4] =>                 )        )    [AB] => Array        (            [h] => 订单关闭原因            [d] => Array                (                    [0] => 买家未付款                    [1] => 订单未关闭                    [2] => 订单未关闭                    [3] => 订单未关闭                    [4] => 订单未关闭                )        )    [AC] => Array        (            [h] => 卖家服务费


你能不能弄成一个数组 保存一行的

$excel = PHPExcel_IOFactory::load('test.xls');$sheet = $excel->getActiveSheet();$w = $sheet->getHighestColumn(); //取得最大的列号$h = $sheet->getHighestRow(); //取得一共有多少行//列与字段对照表$dict = array(  'A' => 'order_number',  'B' => 'member_name',  'C' => 'member_alipay',  'D' => 'member_payment',  'E' => 'member_postage',  'F' => 'membe_integral',  'G' => 'aggregate_amount',  'H' => 'rebate_integral',  'I' => 'member_actual_payments',  'J' => 'member_actual_integral',  'K' => 'order_status',  'L' => 'member_message',  'M' => 'consignee_name',  'N' => 'consignee_address',  'O' => 'Shipping_method',  'P' => 'telephone_number',  'Q' => 'mobile_phone',  'R' => 'create_time',  'S' => 'payment_time',  'T' => 'baby_title',  'U' => 'baby_species',  'V' => 'logistics_number',  'W' => 'logistics_company',  'X' => 'order_remarks',  'Y' => 'boby_number',  'Z' => 'shop_id',  'AA' => 'shop_name',  'AB' => 'order_closure',  'AC' => 'seller_service_fee',  'AD' => 'buyers_service_fee',  'AE' => 'commercial_invoice',  'AF' => 'phone_orders',  'AG' => 'Phase_order_information',  'AH' => 'deposit_ranking',  'AI' => 'modified_sku',  'AJ' => 'modified_orders_address',  'AK' => 'error_info',);$w++; //最大的列号加一for($y=2; $y<=$h; $y++) { //按行读取  $t = array();  for($x='A'; $x!=$w; $x++) {    if($y == 1) $t[$dict[$x]] = $sheet->getCell("$x$y")->getValue();    elseif(in_array($x, array('R', 'S'))) {      $d = $sheet->getCell("$x$y")->getValue();      $t[$dict[$x]] = $d ? gmdate('Y-m-d H:i:s', ($d - 25569) * 86400) : '';    }else $t[$dict[$x]] = $sheet->getCell("$x$y")->getFormattedValue();  }  print_r($t); //这里可做入库操作}
都是这样的格式

Array(    [order_number] => 593355528837832    [member_name] => wangfeilixin123    [member_alipay] => szxszglc@163.com    [member_payment] => 296    [member_postage] => 12    [membe_integral] => 0    [aggregate_amount] => 308    [rebate_integral] => 0    [member_actual_payments] => 0    [member_actual_integral] => 0    [order_status] => 交易关闭    [member_message] =>     [consignee_name] => 王飞    [consignee_address] => 辽宁省 葫芦岛市 绥中县 肖家菜市场东门王艳海鲜行(125200)    [Shipping_method] => 快递    [telephone_number] =>     [mobile_phone] => 18204296511    [create_time] => 2014-03-30 17:35:24    [payment_time] =>     [baby_title] =>     [baby_species] => 0    [logistics_number] =>     [logistics_company] =>     [order_remarks] =>     [boby_number] => 0    [shop_id] => 0    [shop_name] =>     [order_closure] => 买家未付款    [seller_service_fee] => 0    [buyers_service_fee] => 0元    [commercial_invoice]&
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。