centos下 php 使用 Spreadsheet_Excel_Writer 导出excel文件无法打开问题求助!

懵懂一时 发布于 2012/07/21 12:13
阅读 1K+
收藏 1
PHP

项目中需要导出数据到xls,原使用的php_excel,导出速度太慢,而且很占服务器资源,于是使用Spreadsheet_Excel_Writer导出数据到xls,配置如下:

Apache2.2
php5.2.17
OLE-1.0.0RC2
Spreadsheet_Excel_Writer-0.9.3

导出脚本如下:

require ("../plugin/spreadsheet/Excel/Writer.php");
$file_path=excel_file("".$file_name."_","xls");
$workbook = new Spreadsheet_Excel_Writer($file_path[2]);
$workbook->setCustomColor(20,146,208,80);
$workbook->setVersion(8);
      
$format_title_sty = & $workbook->addformat(array('Size'=>10,'Bold'=>1,'Border'=>1,'FgColor'=>20,'FontFamily'=>utf82gb("宋体")));
$format_cont_sty = & $workbook->addformat(array('Size'=>10,'Border'=>1,'FontFamily'=>utf82gb("宋体")));
     
$sheet_rows=40000;//单Sheet记录集个数
$sheet_id=0;
$i=0;
$sheet_i=0;
      
 while($rs= mysqli_fetch_array($rows)){
  $i++;
  $sheet_i++;
  $row_=$i%$sheet_rows;
      
   if($row_==1){
    if($row_counts_list<$sheet_rows+1){
     $sheet_id="";
    }else{
     $sheet_id++;
    }
    $sheets =& $workbook->addWorksheet("".utf82gb($file_name.$sheet_id)."");
        
   for ($f=0;$f<$field_count;$f++){
    $sheets->writeString(0, $f,utf82gb($fields[$f]->name), $format_title_sty);
   }
   $sheet_i=1;
   //$sheets->setRow(0,15);
  }
      
  for ($k=0;$k<$field_count;$k++){
   $sheets->writeString($sheet_i,$k,utf82gb($rs[$k]),$format_cont_sty);
   //$sheets->setRow($sheet_i,15);
  }
  }
 $workbook->close();

在windows下导出文件一切正常,可使用2003、2007、2010、WPS编辑打开,但在linux(centos5.2)下导出的xls文件却只能使用wps打开了,使用excel2010打开时提示“ 在XX中发现不可读取的内容,是否恢复此工作薄的内容? ”,然后就是一片空白了!
请问有谁碰到过这个问题么?是怎么解决的啊?知道的麻烦告知下,多谢 多谢!

加载中
0
懵懂一时
懵懂一时

哈哈,终于找到症结在哪了,出在了OLE库上

pear install OLE-1.0.0RC1
pear install Spreadsheet_Excel_Writer-0.9.3

一定要安装 0RC1 不能使用最新的0RC2..

冰亦碎
冰亦碎
我这也有这问题,能不能稍微说清楚点?
0
szf
szf

虽然我没用过这东东,不过看描述我猜这有可能是运行环境的编码问题

中文windows下运行编码基本上都是GBK

linux则有可能是C或en_US.UTF-8, 这个可能会导致创建的xls文件编码跟GBK环境不一样。

看官方文档相关的就是Worksheet::setInputEncoding了,试试调整下代码吧。

0
西门飞
西门飞
楼上说的情况很有可能 检查下编码吧
0
懵懂一时
懵懂一时

引用来自“szf”的答案

虽然我没用过这东东,不过看描述我猜这有可能是运行环境的编码问题

中文windows下运行编码基本上都是GBK

linux则有可能是C或en_US.UTF-8, 这个可能会导致创建的xls文件编码跟GBK环境不一样。

看官方文档相关的就是Worksheet::setInputEncoding了,试试调整下代码吧。

多谢指点,不过问题貌似不是在这!

php文件本身是utf8编码的,也在代码里设置了setInputEncoding('utf-8')

在centos下产生的xls文件大小,一旦超过某个值就打不开了,小于这个这个值是正常的,只有几行数据的时候正常,多了就不行!!!

真无语了,吧知道问题出在哪了!

 

0
mahone
mahone
用别人东西就这样。。。不出问题大家其乐融融。。。一出问题就蛋疼了。。。
0
懵懂一时
懵懂一时

引用来自“mahone”的答案

用别人东西就这样。。。不出问题大家其乐融融。。。一出问题就蛋疼了。。。

哈哈,现在何止蛋疼啊,已经基本蛋碎了。如果再解决不了,我只能恢复使用php_excel或者用xml来做了

哎,没想到啊,pear出的东西居然在centos下趴了窝!

返回顶部
顶部