首页 新闻 会员 周边

thinkphp 用phpword导出word文档,文件损坏

0
悬赏园豆:15 [待解决问题]

代码:

 1 import("Org.Util.PHPWord");
 2         import("Org.Util.PHPWord.IOFactory");
 3         $PHPWord = new \PHPWord();
 4         $document = $PHPWord->loadTemplate('template1.docx');
 5 
 6         $document->setValue('v1','Sun');
 7         $document->setValue('today','Sun');
 8 
 9         
10 
11 
12         $fileName = "word报表".date("YmdHis");
13         header("Content-type: application/vnd.ms-word");
14         header("Content-Disposition:attachment;filename=".$fileName.".docx");
15         header('Cache-Control: max-age=0');
16         $objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');
17         $objWriter->save('php://output');

导出的word文档提示损坏,不能打开。求大神解决。有没有做php的,看看代码有问题么?

php
问题补充:

项目急,求大神

lippor的主页 lippor | 初学一级 | 园豆:51
提问于:2015-11-28 11:03
< >
分享
所有回答(2)
0

请问问题解决了吗,目前遇到同样的问题找不到解答。请问你是用框架吗

 

就是叫DK | 园豆:202 (菜鸟二级) | 2017-01-16 21:31

 我后来改成用word模板的方式导出数据下载的。没有用这种直接生成word的。

支持(0) 反对(0) lippor | 园豆:51 (初学一级) | 2017-01-16 21:47

@lippor: 万分感谢您的回复,始终是没有找到错误的原因,我在自己测试用的thinkcmf的框架中是可以用的,但是移植到我的项目中导出就会出现“存在不正确的内容”。请问您所说的word 模板的方式导出数据下载具体是指什么呢。我想是不是框架设置了什么内容

支持(0) 反对(0) 就是叫DK | 园豆:202 (菜鸟二级) | 2017-01-16 21:50

@就是叫DK: 我当时的需求是要在word里有一些表格什么的内容。我在需要填充数据的地方用类似 &aa&  这样占位。然后把需要填充的数据替换到模板的这些位置。然后下载下来就好了。

支持(0) 反对(0) lippor | 园豆:51 (初学一级) | 2017-01-16 21:54

@lippor: 我们的需求类似哦,请问方便发一分可以参考的源码么。因为具体来讲我不是很清楚要怎么做

支持(0) 反对(0) 就是叫DK | 园豆:202 (菜鸟二级) | 2017-01-16 21:57

@就是叫DK: 

function outwordsummary(){
        $request = I("request.");
        $table=$request["table"];
        $id=$request["id"];
        $data=D($table)->where("id=$id")->find();
        $data=setTableNo($data);
        wordtemplatetest($table,$data,"表八:责任区督导工作总结");
    }

function wordtemplatetest($table,$data,$filename){
        import("Org.Util.PHPWord");
        import("Org.Util.PHPWord.IOFactory");
        $PHPWord = new \PHPWord();
        $tfile='word/'.$table.'.docx';
        $sfile='word/files/'.iconv('utf-8', 'GB2312//IGNORE', $filename).'.docx';
        $document = $PHPWord->loadTemplate($tfile);


        foreach($data as $key=>$value){
            $document->setValue($key,iconv('utf-8', 'GB2312//IGNORE', $value));
        }

        /*$document->setValue('content', 'Somebody someone');*/
        $document->save($sfile);
        download_file($sfile);

    }

word模板中这样:${inserttime}  但是这个有很多问题需要注意,在模板中写${inserttime}的时候最好不要写错字母,写错就全部删除重新写。你百度一下吧

支持(0) 反对(0) lippor | 园豆:51 (初学一级) | 2017-01-16 22:06

@lippor: 好的,请问再源代码中最后的download方法方法是你自己定义的嘛,谢谢

支持(0) 反对(0) 就是叫DK | 园豆:202 (菜鸟二级) | 2017-01-17 17:21
0

导出没有问题的话,如果是文件打不开,请查看zip扩展是否版本计较低,可以尝试更换php_zip.dll扩展,用较新稳定的版本,

ltiger | 园豆:202 (菜鸟二级) | 2017-10-18 13:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册