doujishan2247 2014-06-26 06:24
浏览 78
已采纳

将Excel文件转换为文本文件时显示错误消息

I found a script which converting .doc, .docx and .xls/.xlsx file to text format. It's successfully converting .doc and .docx file to text format. But when I'm trying to convert a Excel file then it's showing me following error message.

Do you know why It's showing me this Error Message and How do i fix it ? Thank You.

Error Message :

Warning: Missing argument 1 for DocxConversion::xlsx_to_text(), called in D:\software installed\xampp\htdocs\contact-management\class-free.php on line 105 and defined in D:\software installed\xampp\htdocs\contact-management\class-free.php on line 48

Notice: Undefined variable: input_file in D:\software installed\xampp\htdocs\contact-management\class-free.php on line 52

Warning: ZipArchive::open(): Empty string as source in D:\software installed\xampp\htdocs\contact-management\class-free.php on line 52    

Php Class (class-free.php) :

<?php
class DocxConversion{
    private $filename;

    public function __construct($filePath) {
        $this->filename = $filePath;
    }

    private function read_doc() {
        $doc = new doc;
        $doc->read($this->filename);
        return $doc->parse();
    }

    private function read_docx(){

        $striped_content = '';
        $content = '';

        $zip = zip_open($this->filename);

        if (!$zip || is_numeric($zip)) return false;

        while ($zip_entry = zip_read($zip)) {

            if (zip_entry_open($zip, $zip_entry) == FALSE) continue;

            if (zip_entry_name($zip_entry) != "word/document.xml") continue;

            $content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

            zip_entry_close($zip_entry);
        }// end while

        zip_close($zip);

        $content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content);
        $content = str_replace('</w:r></w:p>', "
", $content);
        $striped_content = strip_tags($content);

        return $striped_content;
    }

 /************************excel sheet************************************/

function xlsx_to_text($input_file){
    $xml_filename = "xl/sharedStrings.xml"; //content file name
    $zip_handle = new ZipArchive;
    $output_text = "";
    if(true === $zip_handle->open($input_file)){
        if(($xml_index = $zip_handle->locateName($xml_filename)) !== false){
            $xml_datas = $zip_handle->getFromIndex($xml_index);
            $xml_handle = DOMDocument::loadXML($xml_datas, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
            $output_text = strip_tags($xml_handle->saveXML());
        }else{
            $output_text .="";
        }
        $zip_handle->close();
    }else{
    $output_text .="";
    }
    return $output_text;
}

/*************************power point files*****************************/
function pptx_to_text($input_file){
    $zip_handle = new ZipArchive;
    $output_text = "";
    if(true === $zip_handle->open($input_file)){
        $slide_number = 1; //loop through slide files
        while(($xml_index = $zip_handle->locateName("ppt/slides/slide".$slide_number.".xml")) !== false){
            $xml_datas = $zip_handle->getFromIndex($xml_index);
            $xml_handle = DOMDocument::loadXML($xml_datas, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
            $output_text .= strip_tags($xml_handle->saveXML());
            $slide_number++;
        }
        if($slide_number == 1){
            $output_text .="";
        }
        $zip_handle->close();
    }else{
    $output_text .="";
    }
    return $output_text;
}


    public function convertToText() {

        if(isset($this->filename) && !file_exists($this->filename)) {
           // return "File Not exists";
        }

        $fileArray = pathinfo($this->filename);
        $file_ext  = $fileArray['extension'];
        if($file_ext == "doc" || $file_ext == "docx" || $file_ext == "xlsx" || $file_ext == "pptx")
        {
            if($file_ext == "doc") {
                return $this->read_doc();
            } elseif($file_ext == "docx") {
                return $this->read_docx();
            } elseif($file_ext == "xlsx") {
                return $this->xlsx_to_text();
            }elseif($file_ext == "pptx") {
                return $this->pptx_to_text();
            }
        } else {
            return "Invalid File Type";
        }
    }

}

//$docObj = new DocxConversion("test102.doc");
//$docObj = new DocxConversion("content.doc");
//$docObj = new DocxConversion("english.doc");
//$docObj = new DocxConversion("content.docx");
//$docObj = new DocxConversion("test.xlsx");
//$docObj = new DocxConversion("test.pptx");
//echo $docText= $docObj->convertToText();

?>
  • 写回答

1条回答 默认 最新

  • douguanyun2169 2014-06-26 06:49
    关注

    The problem is in a convertToText() method, that calls different converters with no arguments, while they all need $input_file argument.

    This fix has to make it work:

    if($file_ext == "doc" || $file_ext == "docx" || $file_ext == "xlsx" || $file_ext == "pptx") {
       if($file_ext == "doc") {
          return $this->read_doc($this->filename);
       } elseif($file_ext == "docx") {
          return $this->read_docx($this->filename);
       } elseif($file_ext == "xlsx") {
          return $this->xlsx_to_text($this->filename);
       }elseif($file_ext == "pptx") {
          return $this->pptx_to_text($this->filename);
       } else {
          return "Invalid File Type";
       }
    }
    

    Also, change this line:

    $xml_handle = DOMDocument::loadXML($xml_datas, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
    

    with this code:

    $xml_handle = new DOMDocument();
    $xml_handle->loadXML($xml_datas, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
    

    because DOMDocument::loadXML(..) is an instance method. It's prototype is:

    public mixed loadXML ( string $source [, int $options = 0 ] )
    

    See PHP:DOMDocument for details.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛