'文件名 062014.xlsx 未被识别为 OLE 文件'

问题描述 投票:0回答:2

我正在开发一个处理 Excel 的复杂程序,因此我使用 PHPExcel 从浏览器中搜索和编辑 Excel 文件。我的问题出在程序的编辑部分,所以我编写了一个基本程序来编辑现有的 Excel 页面。 PHPExcel 似乎无法将 Excel 中创建的文件识别为 Excel 文件。这是在我自己的服务器上通过我用 Excel 创建的 Excel 页面完成的。文件名是 062014.xlsx。在 HTML 方面,我将文本框命名为 C3、D3 和 E3,因此它们的名称很容易与 Excel 单元格(php $cell 变量的来源)相对应。我想要做的是获取 html 文本框中的文本,并使用 html 文本框中的数据重写 Excel 中相应的单元格。发布的是我的html和php的全部代码,如果有人能告诉我我的程序哪里出了问题,我将不胜感激。

<html>
<head>


<form method="POST" action="lilrevisetest.php" id="excelform">

<input type="text" value="foo" name="C3" />
    <input type="text" value="foo" name="D3" />
    <input type="text" value="foo" name="E3" />
<button type="submit">Submit</button>
</form>


</body>
</html>




<body>
 <html>


<?php

include 'PHPExcel/IOFactory.php';
 $n=1;
 $x="C";
 $y=1;


 $file = "062014.xlsx";


  $inputFileType = PHPExcel_IOFactory::identify($file);
 $inputFileType = 'Excel5';
 $objReader = PHPExcel_IOFactory::createReader($inputFileType);
 $objReader->setReadDataOnly(false);

  $objPHPExcel = $objReader->load($file);

  $objWorksheet = $objPHPExcel->getActiveSheet();
  $fileObj = fopen("$file", "rt" );


   $y = 3; 
   $x= "C";

   for($n=1; $n<4; $n++){
    $cell = $x . $y; 

    echo $cell; 
    if (isset($_POST[$cell])){
    $string = ($_POST[$cell]);
       $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $inputFileType);

      $objWorksheet ->setCellValue("$cell","$string");
      $objWriter->save($file);
 }
 echo "<td> <input type ='text' value= '$string' name = '$cell'/></td>";
     $x= ++$x;
}

?>

      </html>
   </body>
php html phpexcel
2个回答
26
投票

您正在尝试使用

xlsx
(BIFF 格式)阅读器加载
Excel5
文件(OfficeOpenXML 格式)。

$inputFileType = 'Excel5';
$objReader = PHPExcel_IOFactory::createReader($inputFileType);

您应该针对您尝试加载的文件类型使用正确的阅读器,否则您会收到错误。

您已经使用过

$inputFileType = PHPExcel_IOFactory::identify($file);

识别文件类型和要使用的正确阅读器,那么为什么您要忽略这一点并自己手动(错误地)设置呢?


另外

另一个问题可能是当您尝试保存文件时文件已经打开。

您正在使用 PHPExcel 加载器加载

$file
(
062014.xlsx
),没问题。

由于某种未知的原因,你然后执行

$fileObj = fopen("$file", "rt" );

虽然你根本没有对

$fileObj
做任何事情,但是这样做会让它打开

当您尝试使用

$objWriter->save($file);
保存时,文件仍保持打开状态,因此保存将失败(与文件名无关,只是文件已打开)。

解决方案就像删除该行一样简单

$fileObj = fopen("$file", "rt" );

0
投票

Ini bisa bekerja dengan baik

<?php
require 'vendor1/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
use PhpOffice\PhpSpreadsheet\Writer\Pdf;
$excelreader = IOFactory::createReader('Xml');
$spreadsheet = new Spreadsheet();
$writer = new Xlsx($spreadsheet);
$writer->setPreCalculateFormulas(false);

Jadi jika file yang dibaca xls cukup mengganti "$excelreader = IOFactory::createReader('Xml');" yang sebelumnya "$excelreader = IOFactory::createReader('Xlsx');"

© www.soinside.com 2019 - 2024. All rights reserved.