由于phpoffice/phpexcel(此包已被放弃,不再维护。作者建议改用phpoffice/phpspreadsheet包。)
最近开始使用Phpspreadsheet,发现中文文档不全。自己英文水平一般,又比较着急开发。所以贴上google翻译版,着急的朋友可以先凑合看看,英文底子好的同学可以直接忽略本帖。
本贴仅供参考。
本贴仅供参考。
本贴仅供参考。
原文地址:
文件 » 主题 ” 读写文件
读写文件
从体系结构您已经知道,使用基本PhpSpreadsheet类无法对持久性存储进行读写。为此,PhpSpreadsheet提供读者和作家,这是实现\PhpOffice\PhpSpreadsheet\Reader\IReader
和 \PhpOffice\PhpSpreadsheet\Writer\IWriter
。
\ PhpOffice \ PhpSpreadsheet \ IOFactory
PhpSpreadsheet API提供了多种创建 \PhpOffice\PhpSpreadsheet\Reader\IReader
或 \PhpOffice\PhpSpreadsheet\Writer\IWriter
实例的方法:
通过直接创建\PhpOffice\PhpSpreadsheet\IOFactory
。下面的所有示例都演示了直接创建方法。请注意,您也可以使用\PhpOffice\PhpSpreadsheet\IOFactory
该类来执行此操作。
\PhpOffice\PhpSpreadsheet\Reader\IReader
使用创建\PhpOffice\PhpSpreadsheet\IOFactory
有两种方法可以将文件读入PhpSpreadsheet:使用自动文件类型解析或显式。
自动文件类型解析可\PhpOffice\PhpSpreadsheet\Reader\IReader
使用PhpSpreadsheet 检查不同的 分布。如果其中之一可以加载指定的文件名,则使用该文件名加载文件\PhpOffice\PhpSpreadsheet\Reader\IReader
。显式模式要求您指定 \PhpOffice\PhpSpreadsheet\Reader\IReader
应使用的模式。
您可以使用以下代码示例在自动文件类型解析模式下创建\PhpOffice\PhpSpreadsheet\Reader\IReader
实例 \PhpOffice\PhpSpreadsheet\IOFactory:
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("05featuredemo.xlsx");
此功能的典型用法是当您需要读取用户上传的文件时,并且您不知道他们是在上传xls还是xlsx文件。
如果您需要在阅读器上设置一些属性(例如,仅读取数据,请参阅稍后的更多内容),则可以改用以下变体:
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReaderForFile("05featuredemo.xlsx");
$reader->setReadDataOnly(true);
$reader->load("05featuredemo.xlsx");
您可以使用以下代码示例以显式模式使用创建\PhpOffice\PhpSpreadsheet\Reader\IReader
实例 \PhpOffice\PhpSpreadsheet\IOFactory
:
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader("Xlsx");
$spreadsheet = $reader->load("05featuredemo.xlsx");
请注意,自动类型解析模式比显式模式稍慢。
\PhpOffice\PhpSpreadsheet\Writer\IWriter
使用创建\PhpOffice\PhpSpreadsheet\IOFactory
您可以\PhpOffice\PhpSpreadsheet\Writer\IWriter
使用创建实例 \PhpOffice\PhpSpreadsheet\IOFactory
:
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, "Xlsx");
$writer->save("05featuredemo.xlsx");
Excel 2007(SpreadsheetML)文件格式
Xlsx文件格式是PhpSpreadsheet的主要文件格式。它允许将内存电子表格输出到.xlsx文件。
\ PhpOffice \ PhpSpreadsheet \ Reader \ Xlsx 阅读电子表格
您可以使用以下代码读取.xlsx文件:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load("05featuredemo.xlsx");
仅读取数据
您可以在阅读器上设置选项setReadDataOnly,以指示阅读器忽略样式,数据验证等,而仅读取单元格数据:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load("05featuredemo.xlsx");
仅阅读特定的工作表
您可以在阅读器上设置选项setLoadSheetsOnly,以指示阅读器仅加载具有给定名称的图纸:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setLoadSheetsOnly(["Sheet 1", "My special sheet"]);
$spreadsheet = $reader->load("05featuredemo.xlsx");
仅读取特定的单元格
您可以在阅读器上设置选项setReadFilter,以指示阅读器仅加载与给定规则匹配的单元格。读取过滤器可以是任何实现的类 \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
。默认情况下,使用读取所有单元格\PhpOffice\PhpSpreadsheet\Reader\DefaultReadFilter
。
以下代码将仅读取Excel文件中任何工作表的第1行和第20至30行:
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter {
public function readCell($column, $row, $worksheetName = '') {
// Read title row and rows 20 - 30
if ($row == 1 || ($row >= 20 && $row <= 30)) {
return true;
}
return false;
}
}
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setReadFilter( new MyReadFilter() );
$spreadsheet = $reader->load("06largescale.xlsx");
\ PhpOffice \ PhpSpreadsheet \ Writer \ Xlsx 编写电子表格
您可以使用以下代码编写.xlsx文件:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save("05featuredemo.xlsx");
公式预计算
默认情况下,该编写器会预先计算电子表格中的所有公式。在大型电子表格上,这可能会很慢,甚至可能是不必要的。但是,您可以禁用公式预计算:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->setPreCalculateFormulas(false);
$writer->save("05featuredemo.xlsx");
Office 2003兼容性包
由于Office2003兼容性包中的错误,打开Xlsx电子表格时可能会出现一些小问题(主要与公式计算有关)。您可以使用以下代码启用Office2003兼容性:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->setOffice2003Compatibility(true);
$writer->save("05featuredemo.xlsx");
Office2003兼容性选项仅应在需要时使用,因为它会禁用多个Office2007文件格式选项,从而导致功能较低的Office2007电子表格。
Excel 5(BIFF)文件格式
Xls文件格式是旧的Excel文件格式,已在PhpSpreadsheet中实现,以提供统一的方式来创建.xlsx和.xls文件。它基本上是PEAR Spreadsheet_Excel_Writer的修改版本,尽管它已被扩展并且比旧的PEAR库具有更少的限制和更多的功能。这可以通过BIFF8读取所有使用OLE2的BIFF版本:BIFF5(由Office 95引入),但不能读取早期版本。
Xls文件格式将不再进行开发,它只是为PhpSpreadsheet提供了其他文件格式。
Excel5(BIFF)限制请注意,BIFF文件格式在样式设置单元格和通过PHP处理大型电子表格方面有一些限制。
\ PhpOffice \ PhpSpreadsheet \ Reader \ Xls 阅读电子表格
您可以使用以下代码读取.xls文件:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
$spreadsheet = $reader->load("05featuredemo.xls");
仅读取数据
您可以在阅读器上设置选项setReadDataOnly,以指示阅读器忽略样式,数据验证等,而仅读取单元格数据:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
$reader->setReadDataOnly(true);
$spreadsheet = $reader->load("05featuredemo.xls");
仅阅读特定的工作表
您可以在阅读器上设置选项setLoadSheetsOnly,以指示阅读器仅加载具有给定名称的图纸:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
$reader->setLoadSheetsOnly(["Sheet 1", "My special sheet"]);
$spreadsheet = $reader->load("05featuredemo.xls");
仅读取特定的单元格
您可以在阅读器上设置选项setReadFilter,以指示阅读器仅加载与给定规则匹配的单元格。读取过滤器可以是任何实现的类 \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
。默认情况下,使用读取所有单元格\PhpOffice\PhpSpreadsheet\Reader\DefaultReadFilter
。
以下代码将仅读取Excel文件中任何工作表的第1行和第20至30行:
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter {
public function readCell($column, $row, $worksheetName = '') {
// Read title row and rows 20 - 30
if ($row == 1 || ($row >= 20 && $row <= 30)) {
return true;
}
return false;
}
}
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
$reader->setReadFilter( new MyReadFilter() );
$spreadsheet = $reader->load("06largescale.xls");
\ PhpOffice \ PhpSpreadsheet \ Writer \ Xls 编写电子表格
您可以使用以下代码编写.xls文件:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xls($spreadsheet);
$writer->save("05featuredemo.xls");
Excel 2003 XML文件格式
Excel 2003 XML文件格式是可以在较早版本的Microsoft Excel中使用的文件格式。
Excel 2003 XML限制请注意,Excel 2003 XML格式在样式设置单元格和通过PHP处理大型电子表格方面有一些限制。
\ PhpOffice \ PhpSpreadsheet \ Reader \ Xml 阅读电子表格
您可以使用以下代码读取Excel 2003 .xml文件:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xml();
$spreadsheet = $reader->load("05featuredemo.xml");
仅读取特定的单元格
您可以在阅读器上设置选项setReadFilter,以指示阅读器仅加载与给定规则匹配的单元格。读取过滤器可以是任何实现的类 \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
。默认情况下,使用读取所有单元格\PhpOffice\PhpSpreadsheet\Reader\DefaultReadFilter
。
以下代码将仅读取Excel文件中任何工作表的第1行和第20至30行:
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter {
public function readCell($column, $row, $worksheetName = '') {
// Read title row and rows 20 - 30
if ($row == 1 || ($row >= 20 && $row <= 30)) {
return true;
}
return false;
}
}
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xml();
$reader->setReadFilter( new MyReadFilter() );
$spreadsheet = $reader->load("06largescale.xml");
象征性LinK(SYLK)
符号链接(SYLK)是Microsoft文件格式,通常用于在应用程序(尤其是电子表格)之间交换数据。SYLK文件通常具有.slk后缀。它仅由可显示的ANSI字符组成,可以很容易地由其他应用程序(例如数据库)创建和处理。
SYLK限制请注意,SYLK文件格式在样式设置单元格和通过PHP处理大型电子表格方面有一些限制。
\ PhpOffice \ PhpSpreadsheet \ Reader \ Slk 阅读电子表格
您可以使用以下代码读取.slk文件:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Slk();
$spreadsheet = $reader->load("05featuredemo.slk");
仅读取特定的单元格
您可以在阅读器上设置选项setReadFilter,以指示阅读器仅加载与给定规则匹配的单元格。读取过滤器可以是任何实现的类 \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
。默认情况下,使用读取所有单元格\PhpOffice\PhpSpreadsheet\Reader\DefaultReadFilter
。
以下代码将仅读取SYLK文件中任何工作表的第1行和第20至30行:
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter {
public function readCell($column, $row, $worksheetName = '') {
// Read title row and rows 20 - 30
if ($row == 1 || ($row >= 20 && $row <= 30)) {
return true;
}
return false;
}
}
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Slk();
$reader->setReadFilter( new MyReadFilter() );
$spreadsheet = $reader->load("06largescale.slk");
开放/自由办公室(.ods)
Open Office或Libre Office .ods文件是Open Office或Libre Office Calc文件的标准文件格式。
\ PhpOffice \ PhpSpreadsheet \ Reader \ Ods 阅读电子表格
您可以使用以下代码读取.ods文件:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods();
$spreadsheet = $reader->load("05featuredemo.ods");
仅读取特定的单元格
您可以在阅读器上设置选项setReadFilter,以指示阅读器仅加载与给定规则匹配的单元格。读取过滤器可以是任何实现的类 \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
。默认情况下,使用读取所有单元格\PhpOffice\PhpSpreadsheet\Reader\DefaultReadFilter
。
以下代码将仅读取Calc文件中任何工作表的第1行和第20至30行:
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter {
public function readCell($column, $row, $worksheetName = '') {
// Read title row and rows 20 - 30
if ($row == 1 || ($row >= 20 && $row <= 30)) {
return true;
}
return false;
}
}
$reader = new PhpOffice\PhpSpreadsheet\Reader\Ods();
$reader->setReadFilter( new MyReadFilter() );
$spreadsheet = $reader->load("06largescale.ods");
CSV(逗号分隔值)
CSV(逗号分隔值)通常与其他系统一起用作导入/导出文件格式。PhpSpreadsheet允许读取和写入CSV文件。
CSV限制请注意,CSV文件格式在样式单元格,数字格式等方面有一些限制。
\ PhpOffice \ PhpSpreadsheet \ Reader \ Csv 读取CSV文件
您可以使用以下代码读取.csv文件:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
$spreadsheet = $reader->load("sample.csv");
设置CSV选项
CSV文件通常不是真正的“逗号分隔”,或使用分号(;
)作为分隔符。您可以\PhpOffice\PhpSpreadsheet\Reader\Csv
在读取CSV文件之前指示 一些选项。
分隔符将被自动检测,因此在大多数情况下,无需指定分隔符。但是,如果自动检测不适合用例,则可以手动设置。
请注意,\PhpOffice\PhpSpreadsheet\Reader\Csv
默认情况下假定加载的CSV文件是UTF-8编码的。如果您正在读取在Microsoft Office Excel中创建的CSV文件,则正确的输入编码可能是Windows-1252(CP1252)。始终确保正确设置了输入编码。
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
$reader->setInputEncoding('CP1252');
$reader->setDelimiter(';');
$reader->setEnclosure('');
$reader->setSheetIndex(0);
$spreadsheet = $reader->load("sample.csv");
阅读特定的工作表
CSV文件只能包含一个工作表。因此,您可以指定要从CSV中读取的工作表:
$reader->setSheetIndex(0);
读入现有电子表格
使用CSV文件时,可能会出现要将CSV数据导入到现有Spreadsheet
对象中的情况。以下代码将CSV文件加载到$spreadsheet
包含某些工作表的现有文件中,并导入到第6个工作表中:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
$reader->setDelimiter(';');
$reader->setEnclosure('');
$reader->setSheetIndex(5);
$reader->loadIntoExisting("05featuredemo.csv", $spreadsheet);
\ PhpOffice \ PhpSpreadsheet \ Writer \ Csv 编写CSV文件
您可以使用以下代码编写.csv文件:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
$writer->save("05featuredemo.csv");
设置CSV选项
CSV文件通常不是真正的“逗号分隔”,或使用分号(;
)作为分隔符。您可以\PhpOffice\PhpSpreadsheet\Writer\Csv
在编写CSV文件之前指示 一些选项:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
$writer->setDelimiter(';');
$writer->setEnclosure('');
$writer->setLineEnding("\r\n");
$writer->setSheetIndex(0);
$writer->save("05featuredemo.csv");
写一个特定的工作表
CSV文件只能包含一个工作表。因此,您可以指定要写入CSV的工作表:
$writer->setSheetIndex(0);
公式预计算
默认情况下,该编写器会预先计算电子表格中的所有公式。在大型电子表格上,这可能会很慢,甚至可能是不必要的。但是,您可以禁用公式预计算:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
$writer->setPreCalculateFormulas(false);
$writer->save("05featuredemo.csv");
写入UTF-8 CSV文件
CSV文件以UTF-8编写。如果它们不包含ASCII范围之外的字符,则无需执行其他任何操作。但是,如果文件中包含此类字符,则应明确包含BOM表文件头;如果不正确,Excel将无法正确解释这些字符。可以使用以下代码启用此功能:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
$writer->setUseBOM(true);
$writer->save("05featuredemo.csv");
十进制和千位分隔符
如果要导出的工作表包含带小数或千位分隔符的数字,则在进行导出之前,应考虑要对那些字符使用哪些字符。
默认情况下,PhpSpreadsheet在服务器的区域设置中查找以决定要使用的字符。但是为避免出现问题,建议如下所示显式设置字符。
英文用户将要在导出之前使用它:
\PhpOffice\PhpSpreadsheet\Shared\StringHelper::setDecimalSeparator('.');
\PhpOffice\PhpSpreadsheet\Shared\StringHelper::setThousandsSeparator(',');
德国用户将要使用相反的值。
\PhpOffice\PhpSpreadsheet\Shared\StringHelper::setDecimalSeparator(',');
\PhpOffice\PhpSpreadsheet\Shared\StringHelper::setThousandsSeparator('.');
请注意,上面的代码将小数和千位分隔符设置为全局选项。这也会影响HTML和PDF的导出方式。
HTML
PhpSpreadsheet允许您以HTML格式读取或编写电子表格,以便向PC上没有电子表格应用程序的任何人快速表示其中的数据,或加载由其他脚本创建的文件,这些脚本只是创建HTML标记并为其提供.xls文件扩展。
HTML限制请注意,HTML文件格式在样式单元格,数字格式等方面有一些限制。
\ PhpOffice \ PhpSpreadsheet \ Reader \ HTML 阅读电子表格
您可以使用以下代码读取.html或.htm文件:
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html();
$spreadsheet = $reader->load("05featuredemo.html");
HTML限制请注意,HTML阅读器仍处于试验阶段,尚不支持干净的合并单元格或嵌套表
\ PhpOffice \ PhpSpreadsheet \ Writer \ Html
请注意,\PhpOffice\PhpSpreadsheet\Writer\Html
默认情况下仅输出第一个工作表。
编写电子表格
您可以使用以下代码编写.htm文件:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
$writer->save("05featuredemo.htm");
编写所有工作表
HTML文件可以包含一个或多个工作表。如果要将所有工作表都写到一个HTML文件中,请使用以下代码:
$writer->writeAllSheets();
写一个特定的工作表
HTML文件可以包含一个或多个工作表。因此,您可以指定要写入HTML的工作表:
$writer->setSheetIndex(0);
设置HTML文件的图片根目录
在某些情况下,您需要显式设置所包含映像的根目录。例如,代替:
html
<img src="./images/logo.jpg">
您可能想看看:
<img src="http://www.domain.com/images/logo.jpg">
您可以使用以下代码来实现此结果:
$writer->setImagesRoot('http://www.example.com');
公式预计算
默认情况下,该编写器会预先计算电子表格中的所有公式。在大型电子表格上,这可能会很慢,甚至可能是不必要的。但是,您可以禁用公式预计算:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
$writer->setPreCalculateFormulas(false);
$writer->save("05featuredemo.htm");
将生成的HTML嵌入网页中
在某些情况下,您可能希望将生成的HTML嵌入到现有网站中。\ PhpOffice \ PhpSpreadsheet \ Writer \ Html支持仅生成HTML代码的特定部分,从而使您可以在网站中使用这些部分。
支持的方法:
generateHTMLHeader()
generateStyles()
generateSheetData()
generateHTMLFooter()
generateHTMLAll()
这是一个示例,该示例独立地检索所有部分并将它们合并到结果HTML页面中:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
$hdr = $writer->generateHTMLHeader();
$sty = $writer->generateStyles(false); // do not write <style> and </style>
$newstyle = <<<EOF
<style type='text/css'>
$sty
html {
background-color: yellow;
}
</style>
EOF;
echo preg_replace('@</head>@', "$newstyle\n</head>", $hdr);
echo $writer->generateSheetData();
echo $writer->generateHTMLFooter();
编写UTF-8 HTML文件
通过编写BOM表文件头,可以将HTML文件标记为UTF-8。可以使用以下代码启用此功能:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
$writer->setUseBOM(true);
$writer->save("05featuredemo.htm");
十进制和千位分隔符
请参阅“ \PhpOffice\PhpSpreadsheet\Writer\Csv
如何控制它们的外观”部分。
PDF格式
PhpSpreadsheet允许您将电子表格写入PDF格式,以快速分发表示的数据。
PDF限制请注意,PDF文件格式在样式单元格,数字格式等方面有一些限制。
\ PhpOffice \ PhpSpreadsheet \ Writer \ Pdf
PhpSpreadsheet的PDF Writer是第三方PDF渲染库(如TCPDF,mPDF或Dompdf)的包装。现在,您必须自己安装PDF渲染库。但PhpSpreadsheet可以与许多不同的库一起使用。
当前,支持以下库:
不同的库具有不同的优点和缺点。有些生成比其他格式更好的格式输出,有些比其他格式更快或使用更少的内存,而有些生成较小的.pdf文件。他们希望根据自己的情况使用的是开发人员的选择。
您可以使用其特定名称实例化writer,如下所示:
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Mpdf');
或者,您可以使用更通用的名称注册正在使用的编写器,因此您不必记住选择的是哪个库,而只需要编写PDF文件即可:
$class = \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf::class;
\PhpOffice\PhpSpreadsheet\IOFactory::registerWriter('Pdf', $class);
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Pdf');
或者,您可以像这样直接实例化您选择的作者:
$writer = \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
定制实施或配置
如果需要受支持的PDF库的自定义实现或自定义配置。您可以扩展PDF库和PDF编写器,如下所示:
class My_Custom_TCPDF extends TCPDF
{
// ...
}
class My_Custom_TCPDF_Writer extends \PhpOffice\PhpSpreadsheet\Writer\Pdf\Tcpdf
{
protected function createExternalWriterInstance($orientation, $unit, $paperSize)
{
$instance = new My_Custom_TCPDF($orientation, $unit, $paperSize);
// more configuration of $instance
return $instance;
}
}
\PhpOffice\PhpSpreadsheet\IOFactory::registerWriter('Pdf', MY_TCPDF_WRITER::class);
编写电子表格
一旦确定了要用于PDF生成的渲染器,就可以使用以下代码编写.pdf文件:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
$writer->save("05featuredemo.pdf");
请注意,\PhpOffice\PhpSpreadsheet\Writer\Pdf
默认情况下仅输出第一个工作表。
编写所有工作表
PDF文件可以包含一个或多个工作表。如果要将所有工作表都写到一个PDF文件中,请使用以下代码:
$writer->writeAllSheets();
写一个特定的工作表
PDF文件可以包含一个或多个工作表。因此,您可以指定要写入PDF的工作表:
$writer->setSheetIndex(0);
公式预计算
默认情况下,该编写器会预先计算电子表格中的所有公式。在大型电子表格上,这可能会很慢,甚至可能是不必要的。但是,您可以禁用公式预计算:
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Pdf\Mpdf($spreadsheet);
$writer->setPreCalculateFormulas(false);
$writer->save("05featuredemo.pdf");
十进制和千位分隔符
请参阅“ \PhpOffice\PhpSpreadsheet\Writer\Csv
如何控制它们的外观”部分。
从模板生成Excel文件(读取,修改,写入)
读写器是使您能够从模板生成Excel文件的工具。与从头开始生成Excel文件相比,这需要更少的编码工作,尤其是在您的模板具有许多样式,页面设置属性,标题等的情况下。
这是一个如何打开模板文件,填写几个字段并再次保存的示例:
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('template.xlsx');
$worksheet = $spreadsheet->getActiveSheet();
$worksheet->getCell('A1')->setValue('John');
$worksheet->getCell('A2')->setValue('Smith');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('write.xls');
请注意,可以加载一个xlsx文件并生成一个xls文件。
从HTML内容生成Excel文件
如果要从预渲染的HTML内容生成Excel文件,则可以使用HTML Reader自动进行。当您从将下载/发送给用户的Web应用程序内容生成Excel文件时,此功能非常有用。
例如:
$htmlString = '<table>
<tr>
<td>Hello World</td>
</tr>
<tr>
<td>Hello<br />World</td>
</tr>
<tr>
<td>Hello<br>World</td>
</tr>
</table>';
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html();
$spreadsheet = $reader->loadFromString($htmlString);
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('write.xls');
假设您有多个要从html创建的工作表。这可以如下实现。
$firstHtmlString = '<table>
<tr>
<td>Hello World</td>
</tr>
</table>';
$secondHtmlString = '<table>
<tr>
<td>Hello World</td>
</tr>
</table>';
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html();
$spreadsheet = $reader->loadFromString($firstHtmlString);
$reader->setSheetIndex(1);
$spreadhseet = $reader->loadFromString($secondHtmlString, $spreadsheet);
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('write.xls');