我有一组数据数组.
所以基本格式是
$sheet = array(
array(
'a1 data',
'b1 data',
'c1 data',
'd1 data',
),
array(
'a2 data',
'b2 data',
'c2 data',
'd2 data',
),
array(
'a3 data',
'b3 data',
'c3 data',
'd3 data',
)
);
Run Code Online (Sandbox Code Playgroud)
当我通过数组时,我不知道会有多少列或行.我想要做的是使用php excel从数组中创建一个excel表.
从我所看到的,设置数据的唯一方法是使用
$objPHPExcel->getActiveSheet()->setCellValue('A1', $value);
所以我的问题是
你会如何在细胞上循环?
记住可能会说30列并说70行就是AD70这样,你怎么循环呢?
或者是否有内置函数将数组转换为工作表?
我正在尝试使用PHPExcel以下方法下载Excel文件(xlsx).
require_once("../../phpExcel/Classes/PHPExcel.php");
require_once("../../phpExcel/Classes/PHPExcel/IOFactory.php");
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setCreator("Tiny")
->setLastModifiedBy("Tiny")
->setTitle("Office 2007 XLSX Test Document")
->setSubject("Office 2007 XLSX Test Document")
->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
$objPHPExcel->setActiveSheetIndex(0);
$sheet=$objPHPExcel->getActiveSheet();
$sheet->setCellValue('A1', 'Hello');
$sheet->setCellValue('B2', 'world!');
$sheet->setCellValue('C1', 'Hello');
$sheet->setCellValue('D2', 'world!');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="test.xlsx"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
Run Code Online (Sandbox Code Playgroud)
它可以工作但是当我尝试打开Excel文件时,它会在一致的对话框中要求确认.
Excel在'test.xlsx'中找到了不可读的内容.你想恢复这个工作簿的内容吗?如果您信任此工作簿的来源,请单击"是".
我还尝试按如下方式更改标题
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=test.xlsx");
header("Content-Transfer-Encoding: binary");
Run Code Online (Sandbox Code Playgroud)
它仍然要求同样的确认.我在这做错了什么,拜托?
我目前正在尝试为电子表格设置所有边框,还要设置自动调整大小等格式.
对于工作表1,下面的代码正在工作.电子表格中的所有其他工作表都完全不受影响.我一直试图让它与这个电子表格中的所有其他工作表一起工作,但没有运气.
关于如何全局设置格式以便所有工作表都有边框并自动调整大小的任何想法?此电子表格中所有工作表的布局都是相同的.我正在导出到XLSX文件.
干杯,
/**autosize*/
for ($col = 'A'; $col != 'P'; $col++) {
$objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);
}
/** Borders for all data */
$objPHPExcel->getActiveSheet()->getStyle(
'A2:' .
$objPHPExcel->getActiveSheet()->getHighestColumn() .
$objPHPExcel->getActiveSheet()->getHighestRow()
)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
/** Borders for heading */
$objPHPExcel->getActiveSheet()->getStyle(
'A1:O1'
)->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THICK);
Run Code Online (Sandbox Code Playgroud)
额外问题:我目前已经设定了标题.标题确实出现在纸张1上,但不会出现在任何其他纸张中..是否可以在所有纸张中显示标题?标题在第1行中设置,结果来自第2行.
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Asset_id');
$objPHPExcel->getActiveSheet()->setCellValue('B1', 'Asset_name');
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Asset_type');
$objPHPExcel->getActiveSheet()->setCellValue('D1', 'Asset_make');
$objPHPExcel->getActiveSheet()->setCellValue('E1', 'Asset_model');
Run Code Online (Sandbox Code Playgroud) 在PHPOffice的项目中,有两个与电子表格文件格式相关的项目:
PHPExcel是一个用纯PHP编写的库,它提供了一组类,允许您写入和读取不同的电子表格文件格式,如Excel(BIFF).xls,Excel 2007(OfficeOpenXML).xlsx,CSV,Libre/OpenOffice Calc .ods,Gnumeric,PDF,HTML,...这个项目是围绕微软的OpenXML标准和PHP构建的.
和
PhpSpreadsheet是一个用纯PHP编写的库,它提供了一组类,允许您读取和写入不同的电子表格文件格式,如Excel和LibreOffice Calc.
它们之间的主要区别是什么?
我发现PHPExcel库很棒,可以用PHP(读,写等)操作Excel文件.
但在文档中没有解释如何读取XLSX工作表来提供MySQL表 ...
抱歉这个愚蠢的问题,但我需要它来完成我的工作,并在网上找不到答案.
一个小例子可能非常有用.
非常感谢.
更新 :
我确切地说我的问题:
我在文档中找到的可以帮助我的代码的唯一部分是读取Excel文件并将其显示在HTML表格中:
`require_once 'phpexcel/Classes/PHPExcel.php';
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("edf/equipement.xlsx");
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
echo '<table border="1">' . "\n";
for ($row = 1; $row <= $highestRow; ++$row) {
echo '<tr>' . "\n";
for ($col = 0; $col <= $highestColumnIndex; ++$col) {
echo '<td>' . $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() . '</td>' . "\n";
}
echo '</tr>' . "\n";
}
echo '</table>' . "\n";`
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用循环来提供我的MySQL表,但我不知道如何...我在OOP中不知道...
请问有人可以帮助我吗?
我需要按行合并Excel(xlsx)中的单元格,再使用列合并列PHPExcel.我尝试了以下内容.
$sheet->mergeCells("G".($row_count+1).":G".($row_count+4));
$sheet->mergeCells("H".($row_count+1).":H".($row_count+4));
$sheet->mergeCells("I".($row_count+1).":I".($row_count+4));
Run Code Online (Sandbox Code Playgroud)
变量$row_count有一些不可预测的动态值,如25,50,75等(没有常规模式).

它合并单元格,如前面的快照所示,可以在Note单元格的正下方看到.在按行合并这些单元格之后,我正在尝试按列合并它们,如下所示.
$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));
Run Code Online (Sandbox Code Playgroud)
但它不起作用.当我尝试打开excel文件时,它会要求确认(带有确认框)
Excel在"report.xlsx"中找到了不可读的内容.你想恢复这个工作簿的内容吗?如果您信任此工作簿的来源,请单击"是".
如何在Excel中按行和列合并单元格呢?
在phpexcel我能够锁定细胞
$objPHPExcel->getActiveSheet()->protectCells('A1:D1', 'php');
$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
Run Code Online (Sandbox Code Playgroud)
如果我双击A1到D1之间的任何单元格,它将要求输入密码.
但如果我双击任何其他单元格(例如)A2,它说
"The cell or chart that you are trying to change is protected and therefore
read-only".
Run Code Online (Sandbox Code Playgroud)
它锁定整个工作表,是否可以仅锁定特定单元格并使其他单元格可编辑?
我试图从xls文档中读取一张表,我有这个:
$objPHPExcel = $objReader->load('daily/' . $fisierInbound);
$objWorksheet = $objPHPExcel->setActiveSheetIndex(0);
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
$worksheetTitle = $worksheet->getTitle();
$highestRow = $worksheet->getHighestRow(); // e.g. 10
$highestColumn = $worksheet->getHighestColumn(); // e.g 'F'
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$dataCalls = $worksheet->getCellByColumnAndRow(2, 2)->getValue();
$dataSubstr = substr($dataCalls, 53);
}
Run Code Online (Sandbox Code Playgroud)
问题是它会读取文件的所有表格.
有任何想法吗?
我需要使用PHPExcel一个Symfony2项目.任何人都知道如何正确设置项目以使用库?我应该把它放在供应商目录中吗?在配置文件等应该更改什么?
我有一个可以存储数字的数组,如01,01A,01B,02,2,当我使用PHPExcel获取此值时,例如,在01,02的情况下,它被移除'0'.为了解决这个问题,我尝试格式化这些值将存储在excel中的行,并将其设置为文本类型,就像在下面的代码中一样:
$objPHPExcel->setActiveSheetIndexByName('BlocksList');
$objPHPExcel->getActiveSheet()->fromArray($blockNames, null, 'A2');
$latestBLColumn = $objPHPExcel->getActiveSheet()->getHighestDataColumn();
$column = 'A';
$row = 1;
for ($column = 'A'; $column != $latestBLColumn; $column++) {
$objPHPExcel->getActiveSheet()->getStyle($column.$row)->getNumberFormat()->setFormatCode( PHPExcel_Style_NumberFormat::FORMAT_TEXT );
}
$objPHPExcel->getActiveSheet()->fromArray($blockNames, null, 'A1');
Run Code Online (Sandbox Code Playgroud)
所以,通过这样做,我得到数字,如01,01A,02,02B ......并将其存储在行A2中.我得到最高的列在条件For中使用此值.在这种情况下,我设置A范围内的第1行,直到最高列,形成文本.
我的模板已生成,所有数字都是文本格式,但问题是我认为当我使用" fromArray()"方法时,它会转换数组的数字,然后才能在excel中正确使用它.你知道我怎么能解决这个问题?
phpexcel ×10
php ×8
excel-2007 ×2
arrays ×1
formatting ×1
mysql ×1
phpoffice ×1
symfony ×1
xls ×1