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


Error message showing when converting Excel file to Text file

我找到了一个脚本转换。doc, .docx和。xls/.xlsx文件到文本格式。它成功地将。doc和。docx文件转换为文本格式。但当我试图转换Excel文件,然后它显示我以下错误信息。

你知道为什么它显示给我这个错误信息和我如何修复它吗?谢谢你!

错误提示:

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    
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>', "'r'n", $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();
?>

问题是在convertToText()方法中,调用不同的转换器而没有参数,而它们都需要$input_file参数。

这个修复必须使它工作:

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";
   }
}

同样,修改这一行:

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

的代码:

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

因为DOMDocument::loadXML(..)是一个实例方法。它的原型是:

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