[英]How can I use phpoffice to extract a specific worksheet from an .xlsx file and create a new .xlsx from it?
I have one.xlsx file containing several worksheets.我有一个包含多个工作表的 one.xlsx 文件。 This.xlsx is generated using the php library phpoffice / phpspreadsheet.
This.xlsx 是使用 php 库 phpoffice / phpspreadsheet 生成的。 What I need to do is extract a specific worksheet from this file and create a new one - a separate.xlsx file.
我需要做的是从此文件中提取一个特定的工作表并创建一个新的 - 一个单独的 .xlsx 文件。
My PHP code look like this:我的 PHP 代码如下所示:
<?php
// autoload of phpoffice library
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
// 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');
A new.xlsx file is generated, the worksheet name of this new file is set, but this worksheet is not populated with data.生成了一个新的.xlsx 文件,设置了这个新文件的工作表名称,但是这个工作表没有填充数据。 Why?
为什么? What's missing me?
我缺什么? Did I forget something?
我忘了什么吗?
You were close to getting the solution!您即将获得解决方案! PhpSpreadsheet allows you to use the
clone
keyword on sheet objects and then add them to other spreadsheets. PhpSpreadsheet 允许您在工作表对象上使用
clone
关键字,然后将它们添加到其他电子表格。 I see you're getting this from an uploaded form so a simple check of the MIME Type is probably a good idea.我看到您是从上传的表单中获取的,因此简单检查 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 \PhpOffice\PhpSpreadsheet\Reader\Xlsx;
$reader->setReadDataOnly(true);
$original = $reader->load($input_file);
$cloned_worksheet = clone $original->getSheetByName($required_sheet);
$new = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$new->addSheet($cloned_worksheet);
$sheetIndex = $new->getIndex(
$new->getSheetByName('Worksheet')
);
$new->removeSheetByIndex($sheetIndex);
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($new, "Xlsx");
$writer->save($required_sheet . '.xlsx');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.