2014-06-26 51 views
1

我發現了一個將.doc,.docx和.xls/.xlsx文件轉換爲文本格式的腳本。它已成功將.doc和.docx文件轉換爲文本格式。但是當我試圖轉換一個Excel文件時,它會顯示以下錯誤消息。將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  

PHP類(類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(); 

?> 
+0

請告訴我們您的代碼,調用'xlsx_to_text'方法 – ovnia

+0

@wingsofovnia我上傳了class-free.php腳本來解決我的問題。在這裏你可以找到叫做'xlsx_to_text'方法的函數。謝謝。 – Shibbir

+0

@wingsofovnia這個函數被標記爲Php註釋像'/ ************************ excel表單*********** ************************* /' – Shibbir

回答

0

的問題是在一個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 ]) 

查看PHP:DOMDocument瞭解詳情。

+0

謝謝你。我正在嘗試。 – Shibbir

+0

哦,太棒了!它正在工作但是顯示這個錯誤消息:嚴格標準:非靜態方法DOMDocument :: loadXML()不應該被靜態調用,假設從D:\ software installed \ xampp \ htdocs \ contact-management \ class- 55號線上的free.php。 – Shibbir

+0

@Shibbir更新) – ovnia