phpspreadsheet 中文文档(七)技巧和诀窍

2019年10月11日14:08:35php

 

如下页面为您提供了一些使用普遍的PhpSpreadsheet食谱。请注意,这些文件没有提供有关特定PhpSpreadsheet API函数的完整文档,而只是一个起步。若是您须要特定的API函数,请参阅API文档git

例如,设置工做表的页面方向和大小可 将页面方向设置为A4。其余纸张格式(例如US Letter)不在本文档中讨论,而是在PhpSpreadsheet API文档中讨论github

设置电子表格的元数据

PhpSpreadsheet提供了一种使用文档属性访问器来设置电子表格的元数据的简便方法。电子表格元数据可用于在文件存储库或文档管理系统中查找特定文档。例如,Microsoft Sharepoint使用文档元数据在其文档列表中搜索特定文档。web

设置电子表格元数据的操做以下:编程

$spreadsheet->getProperties() ->setCreator("Maarten Balliauw") ->setLastModifiedBy("Maarten Balliauw") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription( "Test document for Office 2007 XLSX, generated using PHP classes." ) ->setKeywords("office 2007 openxml php") ->setCategory("Test result file"); 

设置电子表格的活动工做表

如下代码行将活动工做表索引设置为第一工做表:数组

$spreadsheet->setActiveSheetIndex(0); 

您还能够按其名称/标题设置活动工做表浏览器

$spreadsheet->setActiveSheetIndexByName('DataSheet') 

将当前活动的工做表更改成名为“ DataSheet”的工做表。安全

将日期或时间写入单元格

在Excel中,日期和时间存储为数字值,用于计算自1900-01-01起通过的天数。例如,日期'2008-12-31'表示为39813。您能够在Microsoft Office Excel中对此日期进行验证,方法是在单元格中输入该日期,而后将数字格式更改成“常规”,以便显示真实的数值。一样,“ 3:15 AM”表示为0.135417。app

PhpSpreadsheet使用UST(通用标准时间)日期和时间值,但不进行内部转换。所以,开发人员应确保传递给日期/时间转换函数的值是UST。less

在单元格中写入日期值由两行代码组成。选择最适合您的方法。这里有些例子:

// MySQL-like timestamp '2008-12-31' or date string \PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() ); $spreadsheet->getActiveSheet() ->setCellValue('D1', '2008-12-31'); $spreadsheet->getActiveSheet()->getStyle('D1') ->getNumberFormat() ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDDSLASH); // PHP-time (Unix time) $time = gmmktime(0,0,0,12,31,2008); // int(1230681600) $spreadsheet->getActiveSheet() ->setCellValue('D1', \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($time)); $spreadsheet->getActiveSheet()->getStyle('D1') ->getNumberFormat() ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDDSLASH); // Excel-date/time $spreadsheet->getActiveSheet()->setCellValue('D1', 39813) $spreadsheet->getActiveSheet()->getStyle('D1') ->getNumberFormat() ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_YYYYMMDDSLASH); 

上面输入日期的方法都会产生相同的结果。 \PhpOffice\PhpSpreadsheet\Style\NumberFormat提供了许多预约义的日期格式。

\PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel()方法还能够与PHP DateTime对象一块儿使用。

相似地,能够以相同的方式输入时间(或日期和时间值):只需记住使用适当的格式代码便可。

注意:

请参阅“使用值绑定器促进数据输入”一节,以了解有关第一个示例中使用的AdvancedValueBinder的更多信息。Excel也能够在基于1904年的日历中运行(Mac上保存的工做簿的默认设置)。一般,使用PhpSpreadsheet时没必要担忧这一点。

将公式写入单元格

在Excel文件中,公式老是按照在Microsoft Office Excel英文版中出现的方式存储,而且PhpSpreadsheet在内部以这种格式处理全部公式。这意味着如下规则成立:

  • 小数点分隔符为.(句号)
  • 函数参数分隔符为,(逗号)
  • 矩阵行分隔符是;(分号)
  • 必须使用英文功能名称

无论使用哪一种语言版本的Microsoft Office Excel来建立Excel文件。

当用户打开最终工做簿时,Microsoft Office Excel将负责根据应用程序语言显示公式。应用程序负责翻译!

下面的代码行将公式 =IF(C4>500,"profit","loss")写入单元格B8中。请注意,公式必须=以使PhpSpreadsheet将此公式识别为开头。

$spreadsheet->getActiveSheet()->setCellValue('B8','=IF(C4>500,"profit","loss")'); 

若是要向=单元格中写入以字符开头的字符串,则应使用该setCellValueExplicit()方法。

$spreadsheet->getActiveSheet() ->setCellValueExplicit( 'B8', '=IF(C4>500,"profit","loss")', \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_STRING ); 

可使用如下代码行再次读取单元格的公式:

$formula = $spreadsheet->getActiveSheet()->getCell('B8')->getValue(); 

若是须要计算出的像元值,请使用如下代码。这将在计算引擎中进一步说明

$value = $spreadsheet->getActiveSheet()->getCell('B8')->getCalculatedValue(); 

公式的区域设置

PhpSpreadsheet中已包含一些本地化元素。您能够经过更改设置来设置语言环境。要将语言环境设置为俄语,请使用:

$locale = 'ru'; $validLocale = \PhpOffice\PhpSpreadsheet\Settings::setLocale($locale); if (!$validLocale) { echo 'Unable to set locale to '.$locale." - reverting to en_us<br />\n"; } 

若是没有俄文文件,则该setLocale()方法将返回错误,而且将始终使用英语设置。

设置区域设置后,您能够从公式的内部英语编码中翻译出该公式。

$formula = $spreadsheet->getActiveSheet()->getCell('B8')->getValue(); $translatedFormula = \PhpOffice\PhpSpreadsheet\Calculation\Calculation::getInstance()->_translateFormulaToLocale($formula); 

您也可使用适合于已定义语言环境的函数名称和参数分隔符来建立公式;而后在设置单元格值以前将其翻译为英语:

$formula = '=ДНЕЙ360(ДАТА(2010;2;5);ДАТА(2010;12;31);ИСТИНА)'; $internalFormula = \PhpOffice\PhpSpreadsheet\Calculation\Calculation::getInstance()->translateFormulaToEnglish($formula); $spreadsheet->getActiveSheet()->setCellValue('B8',$internalFormula); 

当前,公式转换仅转换函数名称,常量TRUE和FALSE以及函数参数分隔符。

当前,支持如下语言环境设置:

语言   区域代码
捷克文 切什蒂纳 cs
丹麦文 丹斯克 DA
德语 德意志
西班牙文 西班牙文 es
芬兰 omi美 科幻
法文 法兰西 fr
匈牙利 马盖尔
义大利文 意大利语
荷兰人 荷兰 nl
挪威 挪威语 没有
抛光 耶兹克·波尔斯基 PL
葡萄牙语 葡萄牙语 pt
巴西葡萄牙语 PortuguêsBrasileiro pt_br
俄语 русскийязык RU
瑞典 斯文斯卡 sv
土耳其 图尔克 TR

在单元格中写入换行符“ \ n”(ALT +“ Enter”)

在Microsoft Office Excel中,您能够经过按ALT +“ Enter”在单元格中换行。当您这样作时,它会自动为该单元格打开“自动换行”。

这是在PhpSpreadsheet中实现此目标的方法:

$spreadsheet->getActiveSheet()->getCell('A1')->setValue("hello\nworld"); $spreadsheet->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true); 

小费

阅读更多有关使用getStyle()其余地方格式化单元格的信息

小费

当AdvancedValuebinder.php在要插入单元格的字符串中看到换行符时,会自动为该单元格打开“自动换行”。就像Microsoft Office Excel同样。尝试这个:

\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() ); $spreadsheet->getActiveSheet()->getCell('A1')->setValue("hello\nworld"); 

在其余地方阅读有关AdvancedValueBinder.php的更多信息。

明确设置单元格的数据类型

您可使用单元格的setValueExplicit方法或工做表的setCellValueExplicit方法显式设置单元格的数据类型。这是一个例子:

$spreadsheet->getActiveSheet()->getCell('A1') ->setValueExplicit( '25', \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_NUMERIC ); 

将单元格更改成可点击的网址

您能够经过设置单元格的超连接属性来使其成为可点击的URL:

$spreadsheet->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net'); $spreadsheet->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('https://www.example.com'); 

若是要创建到另外一个工做表/单元格的超连接,请使用如下代码:

$spreadsheet->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net'); $spreadsheet->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl("sheet://'Sheetname'!A1"); 

设置Excel文件的打印机选项

设置工做表的页面方向和大小

可使用如下代码行来设置工做表的页面方向和大小:

$spreadsheet->getActiveSheet()->getPageSetup() ->setOrientation(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::ORIENTATION_LANDSCAPE); $spreadsheet->getActiveSheet()->getPageSetup() ->setPaperSize(\PhpOffice\PhpSpreadsheet\Worksheet\PageSetup::PAPERSIZE_A4); 

请注意,还有其余页面设置可用。有关全部可能的选项,请参考API文档

页面设置:缩放选项

如图所示,PhpSpreadsheet中的页面设置缩放选项与“页面设置”对话框中的缩放选项直接相关。

如图所示,PhpSpreadsheet中的默认值对应于MS Office Excel中的默认值。

08-page-setup-scaling-options.png

方法 初始值 调用方法将触发 注意
setFitToPage(...) --  
setScale(...) 100 setFitToPage(FALSE)  
setFitToWidth(...) 1个 setFitToPage(TRUE) 值0表示不适合宽度
setFitToHeight(...) 1个 setFitToPage(TRUE) 值0表示不适合身高

这是如何适合无限宽的1页宽的页面:

$spreadsheet->getActiveSheet()->getPageSetup()->setFitToWidth(1); $spreadsheet->getActiveSheet()->getPageSetup()->setFitToHeight(0); 

如您所见,因为setFitToWidth(...)和setFitToHeight(...)会触发此操做,所以没必要调用setFitToPage(TRUE)。

若是使用setFitToWidth(),一般还应setFitToHeight()像示例中那样明确指定 注意依赖于初始值。

页边距

要为工做表设置页边距,请使用如下代码:

$spreadsheet->getActiveSheet()->getPageMargins()->setTop(1); $spreadsheet->getActiveSheet()->getPageMargins()->setRight(0.75); $spreadsheet->getActiveSheet()->getPageMargins()->setLeft(0.75); $spreadsheet->getActiveSheet()->getPageMargins()->setBottom(1); 

请注意,边距值以英寸为单位指定。

08-page-setup-margins.png

将页面水平/垂直居中

要将页面水平/垂直居中,可使用如下代码:

$spreadsheet->getActiveSheet()->getPageSetup()->setHorizontalCentered(true); $spreadsheet->getActiveSheet()->getPageSetup()->setVerticalCentered(false); 

可使用如下代码行来设置工做表的打印页眉和页脚:

$spreadsheet->getActiveSheet()->getHeaderFooter() ->setOddHeader('&C&HPlease treat this document as confidential!'); $spreadsheet->getActiveSheet()->getHeaderFooter() ->setOddFooter('&L&B' . $spreadsheet->getProperties()->getTitle() . '&RPage &P of &N'); 

替换和格式代码(以&开头)能够在页眉和页脚中使用。这些代码没有必需的顺序。

下列代码的第一次出现将格式设置打开,第二次出现再次将其关闭:

  • 删除线
  • 上标
  • 下标

上标和下标不能同时打开。谁先赢,谁就被忽略,而先赢。

Xlsx支持如下代码:

含义
&L “左部分”的代码(有三个页眉/页脚位置,“左”,“中心”和“右”)。当存在两个或两个以上的此部分标记时,全部标记的内容按照出现的顺序链接在一块儿,并放在左侧部分中。
&P “当前页号”的代码
&N “总页数”的代码
&font size “文本字体大小”的代码,其中字体大小是以磅为单位的字体大小。
&K “文本字体颜色”的代码-RGB颜色指定为RRGGBB主题颜色指定为TTSNN,其中TT是主题颜色ID,S是色调/阴影值的“ +”或“-”,NN是色调/阴影值。
&S 开启/关闭“文本删除线”的代码
&X 打开/关闭“文本超级脚本”的代码
&Y 开/关“文本下标”的代码
&C 代码为“中心部分”。当存在两个或两个以上的此部分标记时,全部标记的内容按照出现的顺序链接在一块儿,并放置在中间部分。
&D 代码为“日期”
&T 代码为“时间”
&G “图片做为背景”的代码-请确保将图片添加到页眉/页脚(请参见图片提示)
&U 代码为“文本下划线”
&E 代码为“双下划线”
&R 代码为“右侧部分”。当存在两个或两个以上的此部分标记时,全部标记的内容按照出现的顺序链接在一块儿,并放置在右侧部分中。
&Z “此工做簿的文件路径”的代码
&F “此工做簿的文件名”的代码
&A “工做表标签名称”的代码
&+ 添加到页面#的代码
&- 从页码中减去的代码
&"font name,font type" “文本字体名称”和“文本字体类型”的代码,其中字体名称和字体类型是指定字体名称和类型的字符串,以逗号分隔。字体名称中出现连字符时,表示“未指定”。字体名称和字体类型均可以是本地化的值。
&"-,Bold" “粗体字体样式”的代码
&B “粗体字体样式”的代码
&"-,Regular" “常规字体样式”的代码
&"-,Italic" “斜体字体样式”的代码
&I “斜体字体样式”的代码
&"-,Bold Italic" 代码为“粗斜体字体样式”
&O 代码为“大纲样式”
&H “阴影样式”的代码

小费

上面的代码表在您第一次尝试弄清楚如何编写页眉或页脚时彷佛不堪重负。幸运的是,有一种更简单的方法。让Microsoft Office Excel为您完成工做。例如,在Microsoft Office Excel中建立一个xlsx文件,您能够在其中使用程序本身的界面根据须要插入页眉和页脚。将文件另存为test.xlsx。如今,获取该文件并使用PhpSpreadsheet读取值,以下所示:

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load('test.xlsx'); $worksheet = $spreadsheet->getActiveSheet(); var_dump($worksheet->getHeaderFooter()->getOddFooter()); var_dump($worksheet->getHeaderFooter()->getEvenFooter()); var_dump($worksheet->getHeaderFooter()->getOddHeader()); var_dump($worksheet->getHeaderFooter()->getEvenHeader()); 

这揭示了偶数/奇数页眉和页脚的代码。有经验的用户可能会发现将test.xlsx重命名为test.zip,解压缩并直接检查相关xl / worksheets / sheetX.xml的内容以查找页眉/页脚的代码会更容易。

图片提示

$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooterDrawing(); $drawing->setName('PhpSpreadsheet logo'); $drawing->setPath('./images/PhpSpreadsheet_logo.png'); $drawing->setHeight(36); $spreadsheet->getActiveSheet()->getHeaderFooter()->addImage($drawing, \PhpOffice\PhpSpreadsheet\Worksheet\HeaderFooter::IMAGE_HEADER_LEFT); 

在行或列上设置打印间隔

要设置打印间隔,请使用如下代码,该代码在第10行上设置一个行间隔。

$spreadsheet->getActiveSheet()->setBreak('A10', \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::BREAK_ROW); 

如下代码行在D列上设置了打印中断:

$spreadsheet->getActiveSheet()->setBreak('D10', \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::BREAK_COLUMN); 

在打印时显示/隐藏网格线

要在打印时显示/隐藏网格线,请使用如下代码:

$spreadsheet->getActiveSheet()->setShowGridlines(true); 

设置行/列在顶部/左侧重复

PhpSpreadsheet能够在页面顶部/左侧重复特定的行/单元格。如下代码是如何在特定工做表的每一个打印页面上重复第1至5行的示例:

$spreadsheet->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 5); 

指定打印区域

要指定工做表的打印区域,请使用如下代码:

$spreadsheet->getActiveSheet()->getPageSetup()->setPrintArea('A1:E5'); 

单个工做表中也能够有多个打印区域:

$spreadsheet->getActiveSheet()->getPageSetup()->setPrintArea('A1:E5,G4:M20'); 

款式

格式化单元格

可使用字体,边框,填充,...样式信息来格式化单元格。例如,能够将单元的前景色设置为红色,并向右对齐,将边框设置为黑色和粗边框样式。让咱们在单元格B2上执行此操做:

$spreadsheet->getActiveSheet()->getStyle('B2') ->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED); $spreadsheet->getActiveSheet()->getStyle('B2') ->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT); $spreadsheet->getActiveSheet()->getStyle('B2') ->getBorders()->getTop()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK); $spreadsheet->getActiveSheet()->getStyle('B2') ->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK); $spreadsheet->getActiveSheet()->getStyle('B2') ->getBorders()->getLeft()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK); $spreadsheet->getActiveSheet()->getStyle('B2') ->getBorders()->getRight()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK); $spreadsheet->getActiveSheet()->getStyle('B2') ->getFill()->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID); $spreadsheet->getActiveSheet()->getStyle('B2') ->getFill()->getStartColor()->setARGB('FFFF0000'); 

getStyle()还接受单元格范围做为参数。例如,您能够在一系列单元格上设置红色背景色:

$spreadsheet->getActiveSheet()->getStyle('B3:B7')->getFill() ->setFillType(\PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID) ->getStartColor()->setARGB('FFFF0000'); 

提示建议使用例如getStyle('A1:M500')一次对许多单元格进行样式设置,而不是在循环中分别对单元格进行样式设置。与遍历单元格和分别设置样式相比,这要快得多。

还有另外一种设置样式的方式。如下代码将单元格的样式设置为粗体,右对齐,上边框细和渐变填充:

$styleArray = [ 'font' => [ 'bold' => true, ], 'alignment' => [ 'horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_RIGHT, ], 'borders' => [ 'top' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN, ], ], 'fill' => [ 'fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_GRADIENT_LINEAR, 'rotation' => 90, 'startColor' => [ 'argb' => 'FFA0A0A0', ], 'endColor' => [ 'argb' => 'FFFFFFFF', ], ], ]; $spreadsheet->getActiveSheet()->getStyle('A3')->applyFromArray($styleArray); 

或带有一系列单元格:

$spreadsheet->getActiveSheet()->getStyle('B3:B7')->applyFromArray($styleArray); 

每当您设置多个样式属性时,这种使用数组的替代方法在执行方面都应该更快。可是,除非工做簿中有许多不一样的样式,不然差别几乎没法测量。

数字格式

您一般但愿在Excel中设置数字格式。例如,您可能须要一个千位分隔符,再在十进制分隔符后加上固定数量的小数。或者,也许您但愿某些数字被零填充。

在Microsoft Office Excel中,您可能熟悉从“设置单元格格式”对话框中选择数字格式的过程。这里有一些预约义的数字格式,包括一些日期格式。该对话框的设计方式使您无需与基础原始数字格式代码进行交互,除非您须要自定义数字格式。

在PhpSpreadsheet中,您还能够应用各类预约义的数字格式。例:

$spreadsheet->getActiveSheet()->getStyle('A1')->getNumberFormat() ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1); 

这将格式化数字,例如1587.2,所以当您在MS Office Excel中打开工做簿时,它将显示为1,587.20。(取决于Microsoft Office Excel中小数和千位分隔符的设置,它可能显示为1.587,20)

您可使用如下方法实现与上述彻底相同的效果:

$spreadsheet->getActiveSheet()->getStyle('A1')->getNumberFormat() ->setFormatCode('#,##0.00'); 

在Microsoft Office Excel和PhpSpreadsheet中,每当须要一些特殊的自定义数字格式时,都必须与原始数字格式代码进行交互。例:

$spreadsheet->getActiveSheet()->getStyle('A1')->getNumberFormat() ->setFormatCode('[Blue][>=3000]$#,##0;[Red][<0]$#,##0;$#,##0'); 

另外一个示例是当您想要用前导零将数字零填充到固定长度时:

$spreadsheet->getActiveSheet()->getCell('A1')->setValue(19); $spreadsheet->getActiveSheet()->getStyle('A1')->getNumberFormat() ->setFormatCode('0000'); // will show as 0019 in Excel 

提示在Excel中编写数字格式代码的规则可能很是复杂。有时,您知道如何在Microsoft Office Excel中建立某种数字格式,但不知道底层数字格式代码的外观。你是怎么找到它的?

PhpSpreadsheet附带的阅读器能够救助。使用例如Xlsx阅读器加载模板工做簿,以显示数字格式代码。示例如何读取单元格A1的数字格式代码:

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx'); $spreadsheet = $reader->load('template.xlsx'); var_dump($spreadsheet->getActiveSheet()->getStyle('A1')->getNumberFormat()->getFormatCode()); 

经过将template.xlsx重命名为template.zip,解压缩并在xl / styles.xml中查找包含数字格式代码的相关XML代码,高级用户能够更快地直接检查数字格式代码

对齐和换行

让咱们将垂直对齐方式设置为单元格A1:D4的顶部

$spreadsheet->getActiveSheet()->getStyle('A1:D4') ->getAlignment()->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_TOP); 

这是实现自动换行的方法:

$spreadsheet->getActiveSheet()->getStyle('A1:D4') ->getAlignment()->setWrapText(true); 

设置工做簿的默认样式

能够设置工做簿的默认样式。让咱们将默认字体设置为Arial大小8:

$spreadsheet->getDefaultStyle()->getFont()->setName('Arial'); $spreadsheet->getDefaultStyle()->getFont()->setSize(8); 

样式单元格边框

在PhpSpreadsheet中,很容易在矩形选择上应用各类边框。这是在单元格B2:G8周围应用粗红色边框轮廓的方法。

$styleArray = [ 'borders' => [ 'outline' => [ 'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THICK, 'color' => ['argb' => 'FFFF0000'], ], ], ]; $worksheet->getStyle('B2:G8')->applyFromArray($styleArray); 

在Microsoft Office Excel中,上述操做将与选择单元格B2:G8,启动样式对话框,选择粗红色边框并单击“轮廓”边框组件相对应。

请注意,边框轮廓总体上应用于矩形选择B2:G8,而不是单独应用于每一个单元格。

您能够经过仅使用5个基本边框并一次在一个单元格上进行操做来实现任何边框效果:

  • 剩下
  • 最佳
  • 底部
  • 对角线

像上面的示例同样,其余快捷方式边框也很方便。这些是可用的快捷方式边框:

  • 全部边界
  • 大纲
  • 垂直
  • 水平的

下图显示了全部边框快捷方式的概述:

08-styling-border-options.png

若是同时设置allBorders和vertical,那么咱们将具备“重叠”边框,而且其中一个组件必须赢得另外一个存在边框重叠的组件。在PhpSpreadsheet中,从最弱的边界到最强的边界,列表以下:allBorder,轮廓/内部,垂直/水平,左侧/右侧/顶部/底部/对角线。

能够利用该边界层次结构以简单的方式实现各类效果。

有效的样式数组键 applyFromArray()

下表列出了\PhpOffice\PhpSpreadsheet\Style\Style::applyFromArray()的有效数组键 若是“映射到属性”列将键映射到设置器,则为该键提供的值将直接应用。若是“映射到属性”列将键映射到getter,则为该键提供的值将用做另外一个样式数组。

\ PhpOffice \ PhpSpreadsheet \ Style \ Style

阵列键 映射到媒体资源
getFill()
字形 getFont()
边界 getBorders()
对准 getAlignment()
numberFormat getNumberFormat()
保护 getProtection()

\ PhpOffice \ PhpSpreadsheet \ Style \ Fill

阵列键 映射到媒体资源
fillType setFillType()
回转 setRotation()
startColor getStartColor()
endColor getEndColor()
颜色 getStartColor()

\ PhpOffice \ PhpSpreadsheet \ Style \ Font

阵列键 映射到媒体资源
名称 setName()
胆大 setBold()
斜体 setItalic()
强调 setUnderline()
删除线 setStrikethrough()
颜色 getColor()
尺寸 setSize()
上标 setSuperscript()
下标 setSubscript()

\ PhpOffice \ PhpSpreadsheet \ Style \ Borders

阵列键 映射到媒体资源
全部边界 getLeft(); getRight(); getTop(); getBottom()
剩下 getLeft()
getRight()
最佳 getTop()
底部 getBottom()
对角线 getDiagonal()
垂直 getVertical()
水平的 getHorizo​​ntal()
对角线方向 setDiagonalDirection()
大纲 setOutline()

\ PhpOffice \ PhpSpreadsheet \ Style \ Border

阵列键 映射到媒体资源
borderStyle setBorderStyle()
颜色 getColor()

\ PhpOffice \ PhpSpreadsheet \ Style \ Alignment

阵列键 映射到媒体资源
水平的 setHorizo​​ntal()
垂直 setVertical()
textRotation setTextRotation()
wrapText setWrapText()
缩小以适合 setShrinkToFit()
缩进 setIndent()

\ PhpOffice \ PhpSpreadsheet \ Style \ NumberFormat

阵列键 映射到媒体资源
formatCode setFormatCode()

\ PhpOffice \ PhpSpreadsheet \ Style \ Protection

阵列键 映射到媒体资源
已锁定 setLocked()
setHidden()

有条件地格式化单元格

能够基于特定规则有条件地格式化单元格。例如,若是一个单元格的值小于零,则能够将其设置为红色,若是其值为零或更大,则能够将其设置为绿色。

可使用如下代码为单元格设置条件样式规则集:

$conditional1 = new \PhpOffice\PhpSpreadsheet\Style\Conditional(); $conditional1->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_CELLIS); $conditional1->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_LESSTHAN); $conditional1->addCondition('0'); $conditional1->getStyle()->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED); $conditional1->getStyle()->getFont()->setBold(true); $conditional2 = new \PhpOffice\PhpSpreadsheet\Style\Conditional(); $conditional2->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_CELLIS); $conditional2->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_GREATERTHANOREQUAL); $conditional2->addCondition('0'); $conditional2->getStyle()->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_GREEN); $conditional2->getStyle()->getFont()->setBold(true); $conditionalStyles = $spreadsheet->getActiveSheet()->getStyle('B2')->getConditionalStyles(); $conditionalStyles[] = $conditional1; $conditionalStyles[] = $conditional2; $spreadsheet->getActiveSheet()->getStyle('B2')->setConditionalStyles($conditionalStyles); 

若是要将规则集复制到其余单元格,则能够复制样式对象:

$spreadsheet->getActiveSheet() ->duplicateStyle( $spreadsheet->getActiveSheet()->getStyle('B2'), 'B3:B7' ); 

在单元格中添加评论

要将注释添加到单元格,请使用如下代码。下面的示例向单元格E11添加注释:

$spreadsheet->getActiveSheet() ->getComment('E11') ->setAuthor('Mark Baker'); $commentRichText = $spreadsheet->getActiveSheet() ->getComment('E11') ->getText()->createTextRun('PhpSpreadsheet:'); $commentRichText->getFont()->setBold(true); $spreadsheet->getActiveSheet() ->getComment('E11') ->getText()->createTextRun("\r\n"); $spreadsheet->getActiveSheet() ->getComment('E11') ->getText()->createTextRun('Total amount on the current invoice, excluding VAT.'); 

08-cell-comment.png

将自动过滤器应用于一系列单元格

要将自动过滤器应用于一系列单元格,请使用如下代码:

$spreadsheet->getActiveSheet()->setAutoFilter('A1:C9'); 

确保您始终包括完整的过滤器范围!Excel确实仅支持设置标题行,但这不是最佳实践。

在电子表格上设置安全性

Excel提供3个级别的“保护”:

  • 文档:容许您在完整的电子表格上设置密码,仅当输入该密码时才能够进行更改。
  • 工做表:提供其余安全选项:您能够禁止在特定工做表上插入行,禁止排序,...
  • 单元格:提供用于锁定/解锁单元格以及显示/隐藏内部公式的选项。

有关设置文档安全性的示例:

$spreadsheet->getSecurity()->setLockWindows(true); $spreadsheet->getSecurity()->setLockStructure(true); $spreadsheet->getSecurity()->setWorkbookPassword("PhpSpreadsheet"); 

有关设置工做表安全性的示例:

$spreadsheet->getActiveSheet() ->getProtection()->setPassword('PhpSpreadsheet'); $spreadsheet->getActiveSheet() ->getProtection()->setSheet(true); $spreadsheet->getActiveSheet() ->getProtection()->setSort(true); $spreadsheet->getActiveSheet() ->getProtection()->setInsertRows(true); $spreadsheet->getActiveSheet() ->getProtection()->setFormatCells(true); 

有关设置单元安全性的示例:

$spreadsheet->getActiveSheet()->getStyle('B1') ->getProtection() ->setLocked(\PhpOffice\PhpSpreadsheet\Style\Protection::PROTECTION_UNPROTECTED); 

若是须要任何工做表保护功能,请确保启用工做表保护!可使用如下代码完成此操做:

$spreadsheet->getActiveSheet()->getProtection()->setSheet(true); 

在单元上设置数据验证

数据验证是Xlsx的强大功能。它容许在能够插入特定单元格的数据上指定输入过滤器。该过滤器能够是一个范围(即值必须在0到10之间),列表(即值必须从列表中选取),...

如下代码仅容许在单元格B3中输入10到20之间的数字:

$validation = $spreadsheet->getActiveSheet()->getCell('B3') ->getDataValidation(); $validation->setType( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_WHOLE ); $validation->setErrorStyle( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_STOP ); $validation->setAllowBlank(true); $validation->setShowInputMessage(true); $validation->setShowErrorMessage(true); $validation->setErrorTitle('Input error'); $validation->setError('Number is not allowed!'); $validation->setPromptTitle('Allowed input'); $validation->setPrompt('Only numbers between 10 and 20 are allowed.'); $validation->setFormula1(10); $validation->setFormula2(20); 

如下代码仅容许从数据列表中选取的项输入到单元格B5中:

$validation = $spreadsheet->getActiveSheet()->getCell('B5') ->getDataValidation(); $validation->setType( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::TYPE_LIST ); $validation->setErrorStyle( \PhpOffice\PhpSpreadsheet\Cell\DataValidation::STYLE_INFORMATION ); $validation->setAllowBlank(false); $validation->setShowInputMessage(true); $validation->setShowErrorMessage(true); $validation->setShowDropDown(true); $validation->setErrorTitle('Input error'); $validation->setError('Value is not in list.'); $validation->setPromptTitle('Pick from list'); $validation->setPrompt('Please pick a value from the drop-down list.'); $validation->setFormula1('"Item A,Item B,Item C"'); 

当使用上述数据验证列表时,请确保将列表放在和之间""并用逗号(,分隔项目

重要的是要记住,参与Excel公式的任何字符串最多能够包含255个字符(而不是字节)。这对字符串“ Item A,Item B,Item C”中能够包含的项目设置了限制。所以,一般最好直接在某个单元格区域(例如A1:A3)中键入项目值,而改成使用 $validation->setFormula1('Sheet!$A$1:$A$3')另外一个好处是,项目值自己能够包含逗号,字符自己。

若是您须要在多个单元格上进行数据验证,则能够克隆规则集:

$spreadsheet->getActiveSheet()->getCell('B8')->setDataValidation(clone $validation); 

设置列的宽度

可使用如下代码设置列的宽度:

$spreadsheet->getActiveSheet()->getColumnDimension('D')->setWidth(12); 

若是但愿PhpSpreadsheet执行自动宽度计算,请使用如下代码。PhpSpreadsheet将使用最宽列值的宽度来近似列。

$spreadsheet->getActiveSheet()->getColumnDimension('B')->setAutoSize(true); 

08-column-width.png

PhpSpreadsheet中的列宽度量与您在Microsoft Office Excel中可能习惯的度量彻底对应。在Excel中很难处理列宽,而且有几种度量列宽的方法。

  1. 以字符单位表示的内部宽度(例如,8.43多是您在Excel中熟悉的宽度)
  2. 全宽(以像素为单位)(例如64像素)
  3. 以字符为单位的全宽(例如9.140625,值-1表示未设置的宽度)

PhpSpreadsheet始终以“ 3.全角字符单位”运行,这其实是存储在任何Excel文件中的惟一值,所以是最可靠的度量。不幸的是,Microsoft Office Excel不会为您提供这种措施而是在打开文件时由应用程序计算度量1和2,而且在各类对话框和工具提示中显示这些值。

字符宽度单位是0工做簿默认字体中(零)字形的宽度所以,只有在两个不一样工做簿中具备相同默认工做簿字体的状况下,才能够比较以字符为单位测量的列宽。若是您有一些Excel文件而且须要知道度量3中的列宽,则可使用PhpSpreadsheet和回显检索到的值。

显示/隐藏列

若要设置工做表的列可见性,可使用如下代码。第一行明确显示列C,第二行隐藏列D。

$spreadsheet->getActiveSheet()->getColumnDimension('C')->setVisible(true); $spreadsheet->getActiveSheet()->getColumnDimension('D')->setVisible(false); 

分组/概述一列

要对一列进行分组/概述,可使用如下代码:

$spreadsheet->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1); 

您也能够折叠列。请注意,您还应该将列设置为不可见,不然折叠将在Excel 2007中不可见。

$spreadsheet->getActiveSheet()->getColumnDimension('E')->setCollapsed(true); $spreadsheet->getActiveSheet()->getColumnDimension('E')->setVisible(false); 

请参阅“分组/概述一行”部分以获取有关折叠的完整示例。

您能够指示PhpSpreadsheet将摘要添加到右侧(默认)或左侧。如下代码将摘要添加到左侧:

$spreadsheet->getActiveSheet()->setShowSummaryRight(false); 

设置行的高度

可使用如下代码设置行的高度:

$spreadsheet->getActiveSheet()->getRowDimension('10')->setRowHeight(100); 

Excel以点为单位测量行高,其中1 pt是1/72英寸(或约0.35mm)。预设值为12.75点;而且容许的值范围在0到409 pts之间,其中0 pts是隐藏行。

显示/隐藏行

若要设置工做表的行可见性,可使用如下代码。下面的示例隐藏第10行。

$spreadsheet->getActiveSheet()->getRowDimension('10')->setVisible(false); 

请注意,若是您使用自动过滤器应用活动过滤器,则在保存文件时,它将覆盖您在该自动过滤器范围内手动隐藏或取消隐藏的全部行。

分组/概述行

要对行进行分组/概述,可使用如下代码:

$spreadsheet->getActiveSheet()->getRowDimension('5')->setOutlineLevel(1); 

您也能够折叠该行。请注意,您还应该将行设置为不可见,不然折叠将在Excel 2007中不可见。

$spreadsheet->getActiveSheet()->getRowDimension('5')->setCollapsed(true); $spreadsheet->getActiveSheet()->getRowDimension('5')->setVisible(false); 

这是折叠第50至80行的示例:

for ($i = 51; $i <= 80; $i++) { $spreadsheet->getActiveSheet()->setCellValue('A' . $i, "FName $i"); $spreadsheet->getActiveSheet()->setCellValue('B' . $i, "LName $i"); $spreadsheet->getActiveSheet()->setCellValue('C' . $i, "PhoneNo $i"); $spreadsheet->getActiveSheet()->setCellValue('D' . $i, "FaxNo $i"); $spreadsheet->getActiveSheet()->setCellValue('E' . $i, true); $spreadsheet->getActiveSheet()->getRowDimension($i)->setOutlineLevel(1); $spreadsheet->getActiveSheet()->getRowDimension($i)->setVisible(false); } $spreadsheet->getActiveSheet()->getRowDimension(81)->setCollapsed(true); 

您能够指示PhpSpreadsheet在可折叠行下方(默认)或上方添加摘要。如下代码添加了以上摘要:

$spreadsheet->getActiveSheet()->setShowSummaryBelow(false); 

合并/取消合并单元格

若是要在工做表中显示大量数据,则能够将两个或多个单元合并在一块儿,成为一个单元。可使用如下代码完成此操做:

$spreadsheet->getActiveSheet()->mergeCells('A18:E22'); 

可使用unmergeCells方法删除合并:

$spreadsheet->getActiveSheet()->unmergeCells('A18:E22'); 

插入行/列

您能够在特定位置插入/删除行/列。如下代码在第7行以前插入了2行:

$spreadsheet->getActiveSheet()->insertNewRowBefore(7, 2); 

将工程图添加到工做表

工程图始终表示为单独的对象,能够将其添加到工做表中。所以,您必须首先实例化new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing,而后为其属性分配一个有意义的值:

$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing(); $drawing->setName('Logo'); $drawing->setDescription('Logo'); $drawing->setPath('./images/officelogo.jpg'); $drawing->setHeight(36); 

要将上述图形添加到工做表中,请使用如下代码片断。PhpSpreadsheet在图形和工做表之间建立连接:

$drawing->setWorksheet($spreadsheet->getActiveSheet()); 

您能够在工程图上设置许多属性,如下是一些示例:

$drawing->setName('Paid'); $drawing->setDescription('Paid'); $drawing->setPath('./images/paid.png'); $drawing->setCoordinates('B15'); $drawing->setOffsetX(110); $drawing->setRotation(25); $drawing->getShadow()->setVisible(true); $drawing->getShadow()->setDirection(45); 

您也能够添加使用GD功能建立的图像,而无需先将它们做为内存中图形保存到磁盘。

// Use GD to create an in-memory image $gdImage = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream'); $textColor = imagecolorallocate($gdImage, 255, 255, 255); imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor); // Add the In-Memory image to a worksheet $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing(); $drawing->setName('In-Memory image 1'); $drawing->setDescription('In-Memory image 1'); $drawing->setCoordinates('A1'); $drawing->setImageResource($gdImage); $drawing->setRenderingFunction( \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::RENDERING_JPEG ); $drawing->setMimeType(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_DEFAULT); $drawing->setHeight(36); $drawing->setWorksheet($spreadsheet->getActiveSheet()); 

从工做表中读取图像

一个常见的问题是如何从已加载的工做簿中检索图像,并将其做为单独的图像文件保存到磁盘。

如下代码从当前活动的工做表中提取图像,并将每一个图像写为一个单独的文件。

$i = 0; foreach ($spreadsheet->getActiveSheet()->getDrawingCollection() as $drawing) { if ($drawing instanceof \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing) { ob_start(); call_user_func( $drawing->getRenderingFunction(), $drawing->getImageResource() ); $imageContents = ob_get_contents(); ob_end_clean(); switch ($drawing->getMimeType()) { case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_PNG : $extension = 'png'; break; case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_GIF: $extension = 'gif'; break; case \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_JPEG : $extension = 'jpg'; break; } } else { $zipReader = fopen($drawing->getPath(),'r'); $imageContents = ''; while (!feof($zipReader)) { $imageContents .= fread($zipReader,1024); } fclose($zipReader); $extension = $drawing->getExtension(); } $myFileName = '00_Image_'.++$i.'.'.$extension; file_put_contents($myFileName,$imageContents); } 

向单元格添加富文本

可使用\PhpOffice\PhpSpreadsheet\RichText\RichText实例将富文本添加到单元格 这是一个示例,它建立如下富文本字符串:

除非发票上另有说明,不然该发票应在月底后的三十天内支付

$richText = new \PhpOffice\PhpSpreadsheet\RichText\RichText(); $richText->createText('This invoice is '); $payable = $richText->createTextRun('payable within thirty days after the end of the month'); $payable->getFont()->setBold(true); $payable->getFont()->setItalic(true); $payable->getFont()->setColor( new \PhpOffice\PhpSpreadsheet\Style\Color( \PhpOffice\PhpSpreadsheet\Style\Color::COLOR_DARKGREEN ) ); $richText->createText(', unless specified otherwise on the invoice.'); $spreadsheet->getActiveSheet()->getCell('A18')->setValue($richText); 

定义一个命名范围

PhpSpreadsheet支持命名范围的定义。可使用如下代码定义它们:

// Add some data $spreadsheet->setActiveSheetIndex(0); $spreadsheet->getActiveSheet()->setCellValue('A1', 'Firstname:'); $spreadsheet->getActiveSheet()->setCellValue('A2', 'Lastname:'); $spreadsheet->getActiveSheet()->setCellValue('B1', 'Maarten'); $spreadsheet->getActiveSheet()->setCellValue('B2', 'Balliauw'); // Define named ranges $spreadsheet->addNamedRange( new \PhpOffice\PhpSpreadsheet\NamedRange('PersonFN', $spreadsheet->getActiveSheet(), 'B1') ); $spreadsheet->addNamedRange( new \PhpOffice\PhpSpreadsheet\NamedRange('PersonLN', $spreadsheet->getActiveSheet(), 'B2') ); 

可选地,能够传递第四个参数来定义本地命名范围(即仅在当前工做表上可用)。默认状况下,命名范围是全局的。

将输出重定向到客户端的Web浏览器

有时,人们确实但愿将文件输出到客户的浏览器,尤为是在动态建立电子表格时。有一些简单的步骤能够执行如下操做:

  1. 建立您的PhpSpreadsheet电子表格
  2. 输出您要输出的文档类型的HTTP标头
  3. 使用\PhpOffice\PhpSpreadsheet\Writer\*您选择的,而后保存到'php://output'

\PhpOffice\PhpSpreadsheet\Writer\Xlsx写入时使用临时存储php://output默认状况下,临时文件存储在脚本的工做目录中。若是没有访问权限,它将退回到操做系统的临时文件位置。

未经受权观看可能不安全!根据您操做系统的配置,任何人均可以使用同一临时存储文件夹读取临时存储。当须要对文档保密时,建议不要使用php://output

HTTP标头

将Excel 2007文件重定向到客户端浏览器的脚本示例:

/* Here there will be some code where you create $spreadsheet */ // redirect output to client browser header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="myfile.xlsx"'); header('Cache-Control: max-age=0'); $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('php://output'); 

将Xls文件重定向到客户端浏览器的脚本示例:

/* Here there will be some code where you create $spreadsheet */ // redirect output to client browser header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="myfile.xls"'); header('Cache-Control: max-age=0'); $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls'); $writer->save('php://output'); 

警告:

确保不包括任何echo语句或输出除Excel文件之外的任何其余内容。在开始<?php标记以前不该有空格,而在结束?> 标记以后不该有任何换行符(也能够将其省略以免出现问题)。确保您保存的脚本没有BOM(字节顺序标记),由于这算做回显输出。相同的内容适用于全部包含的文件。不遵循上述准则可能会致使损坏的Excel文件到达客户端浏览器,和/或PHP没法设置标头(致使警告消息)。

设置默认列宽

可使用如下代码设置默认列宽:

$spreadsheet->getActiveSheet()->getDefaultColumnDimension()->setWidth(12); 

设置默认行高

可使用如下代码设置默认行高:

$spreadsheet->getActiveSheet()->getDefaultRowDimension()->setRowHeight(15); 

将GD工程图添加到工做表

在某些状况下,您可能想使用GD生成内存中映像并将其添加到中,Spreadsheet而无需先将此文件保存到临时位置。

这是一个在内存中生成图像并将其添加到活动工做表的示例:

// Generate an image $gdImage = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream'); $textColor = imagecolorallocate($gdImage, 255, 255, 255); imagestring($gdImage, 1, 5, 5, 'Created with PhpSpreadsheet', $textColor); // Add a drawing to the worksheet $drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing(); $drawing->setName('Sample image'); $drawing->setDescription('Sample image'); $drawing->setImageResource($gdImage); $drawing->setRenderingFunction(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::RENDERING_JPEG); $drawing->setMimeType(\PhpOffice\PhpSpreadsheet\Worksheet\MemoryDrawing::MIMETYPE_DEFAULT); $drawing->setHeight(36); $drawing->setWorksheet($spreadsheet->getActiveSheet()); 

设置工做表缩放级别

要设置工做表的缩放级别,可使用如下代码:

$spreadsheet->getActiveSheet()->getSheetView()->setZoomScale(75); 

请注意,缩放级别应在10-400的范围内。

工做表标签颜色

有时您想为工做表标签设置颜色。例如,您能够有一个红色工做表标签:

$worksheet->getTabColor()->setRGB('FF0000'); 

在工做簿中建立工做表

若是您须要在工做簿中建立更多工做表,请按照如下步骤操做:

$worksheet1 = $spreadsheet->createSheet(); $worksheet1->setTitle('Another sheet'); 

能够将其createSheet()视为Excel中的“插入工做表”按钮。当您单击该按钮时,新的工做表将添加到工做簿中现有的工做表集合中。

隐藏的工做表(Sheet状态)

使用如下代码将工做表设置为隐藏

$spreadsheet->getActiveSheet() ->setSheetState(\PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_HIDDEN); 

有时,您甚至可能但愿工做表“很是隐藏”可用的工做表状态为:

  • \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_VISIBLE
  • \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_HIDDEN
  • \PhpOffice\PhpSpreadsheet\Worksheet\Worksheet::SHEETSTATE_VERYHIDDEN

在Excel中,只能以编程方式(例如,使用Visual Basic Macro)设置工做表状态“很是隐藏”。不能经过用户界面使此类工做表可见。

从右到左的工做表

能够分别设置工做表,不管列A应从左侧仍是右侧开始。保留默认值。这是从右到左设置列的方法。

// right-to-left worksheet $spreadsheet->getActiveSheet()->setRightToLeft(true);
相关文章
相关标签/搜索