Hướng dẫn phpspreadsheet corrupt file - tập tin bị hỏng phpspreadsheet
Tôi có vấn đề khi cố gắng tải xuống tệp XLSX. Nó hoạt động tốt khi tôi kiểm tra nó cục bộ, nhưng khi tôi tải nó lên máy chủ sản xuất, tệp bị hỏng. Show Đây là đầu ra tệp: Đây là mã IM đang sử dụng:
Tôi đã thử thay đổi tiêu đề, nó không giúp được gì: tiêu đề ('loại nội dung: Ứng dụng/vnd.ms-excel'); Đây là:
Hành vi mong đợi là gì?Phục vụ bảng tính trống cho trình duyệt Hành vi hiện tại là gì?Phục vụ một tập tin Excel bị hỏng. Thông báo lỗi Excel:
Sau khi sửa chữa, tôi nhận được tin nhắn sau:
Các bước để tái tạo là gì?Chạy mã bên dưới
require __DIR__ . '/vendor/autoload.php';
// add code that show the issue here...
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
// Redirect output to a client’s web browser (Xlsx)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="test.xlsx"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header('Pragma: public'); // HTTP/1.0
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output'); Phiên bản nào của phpspreadsheet và PHP bị ảnh hưởng?PHP: V7.0.22 Excel: 2016 OS: Windows 10, 64bit Webserver: Apache HTTPD-2.4.27-win64-VC14 (thông qua Laragon v3.1.4) Ghi chúHành vi tương tự tồn tại nếu tôi tải tệp excel trống qua load ()
Khi tạo một bảng tính với các siêu liên kết, các liên kết phải được chèn dưới dạng URL siêu văn bản và không nên tham nhũng tệp. Với hơn 32766 hàng và 2 cột, tệp được tạo bị hỏng và tất cả các siêu liên kết sẽ bị xóa sau khi sửa chữa nó trong Excel.Đối với các thử nghiệm của tôi, giới hạn cho các hàng là 32767 khi xảy ra lỗi.
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
require __DIR__ . '/vendor/autoload.php';
// Create new Spreadsheet object
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$columns = array (
"A",
"B"
);
//Limit where error occurs is 32767. No error for 32766
for( $i = 1; $i < 32767; $i ++ )
{
foreach ( $columns as $column )
{
$currentCell = $sheet->getCell( $column . $i );
$currentCell->setValueExplicit( "http://google.de", DataType::TYPE_STRING );
$sheet->getCell( $column . $i )->getHyperlink()->setUrl( "http://google.de" );
}
}
//Write to file
//Occures also for XLS Files
$writer = new Xlsx($spreadsheet);
$writer->save("test.xlsx"); |