我如何使用office从.xlsx文件中提取特定的工作表并从中创建新的.xlsx ?



我有一个.xlsx文件,其中包含几个工作表。这个。xlsx是使用php库phoffice/phpspreadsheet生成的。我需要做的是从这个文件中提取一个特定的工作表,并创建一个新的-一个单独的。xlsx文件。

我的PHP代码是这样的:

<?php
// autoload of phpoffice library
require 'vendor/autoload.php';
use PhpOfficePhpSpreadsheetIOFactory;
use PhpOfficePhpSpreadsheetWorksheetWorksheet;
use PhpOfficePhpSpreadsheetSpreadsheet;
// load .xlsx file from html form
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($_FILES['in_file']['tmp_name']);
// setting the required sheet
$sheet = $spreadsheet->getSheetByName('required sheet');
// instance of the Worksheet object
$ws = new Worksheet($sheet);
// creating a new spreadsheet
$newSpreadsheet = new Spreadsheet();
// adding a worksheet to a new spreadsheet
$newSpreadsheet->addSheet($ws, 1);
// remove the worksheet in the first position
$newSpreadsheet->removeSheetByIndex(0);
// save the new .xlsx file
$writer = IOFactory::createWritter($newSpreadsheet, 'Xlsx');
$writer->save('new_xlsx.xlsx');

生成一个新的。xlsx文件,设置这个新文件的工作表名称,但是这个工作表没有填充数据。为什么?是什么在想念我?我忘了什么吗?

你就快找到答案了!PhpSpreadsheet允许您在工作表对象上使用clone关键字,然后将它们添加到其他工作表中。我看到你从一个上传的表单得到这个,所以一个简单的检查MIME类型可能是一个好主意。

$required_sheet = 'Test3';
$input_file = 'test.xlsx';
$mime_type = mime_content_type($input_file);
if ($mime_type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
    die('Not an Xlsx file');
$reader = new PhpOfficePhpSpreadsheetReaderXlsx;
$reader->setReadDataOnly(true);
$original = $reader->load($input_file);
$cloned_worksheet = clone $original->getSheetByName($required_sheet);
$new = new PhpOfficePhpSpreadsheetSpreadsheet();
$new->addSheet($cloned_worksheet);
$sheetIndex = $new->getIndex(
    $new->getSheetByName('Worksheet')
);
$new->removeSheetByIndex($sheetIndex);
$writer = PhpOfficePhpSpreadsheetIOFactory::createWriter($new, "Xlsx");
$writer->save($required_sheet . '.xlsx');

最新更新