我的问题是关于在 codeigniter 中生成 Excel 表。Excel 工作表子标题不是固定的,它们是根据数据确定的,这就是我无法合并单元格的原因。有什么解决办法吗?例如:-这里的子标题不是固定的。
我已经生成了 xmlx 文件,我可以保存它并通过以下方式提供给用户:
$writer->save('hello world.xlsx');
header('Location: hello world.xlsx');
Run Code Online (Sandbox Code Playgroud)
但是,该文件仍保留在硬盘驱动器上。我需要摆脱它,因为它是一个安全威胁。
我尝试取消链接文件
unlink('hello world.xlsx');
Run Code Online (Sandbox Code Playgroud)
但这会过早地删除文件,因此用户无法访问它。如果它可以与 unlink 一起工作,那么我需要确保该文件将被删除(所以正确使用等等die();)
编辑: 这不仅仅是出于安全原因。提供程序不允许保存文件,因此这是唯一的方法。
我正在使用 PhpSpreasdheet php 库。我已经完成了几乎所有我想要对特定列进行求和并想要显示该列的总计的操作。请参阅下面的我的输出:-

我尝试过下面的代码:-
$spreadsheet = new Spreadsheet();
$Excel_writer = new Xlsx($spreadsheet);
$spreadsheet->setActiveSheetIndex(0);
$activeSheet = $spreadsheet->getActiveSheet();
$activeSheet->setCellValue('A1', 'Location');
$activeSheet->setCellValue('B1', 'Media Vehicle');
$activeSheet->setCellValue('C1', 'Dimension');
$activeSheet->setCellValue('D1', 'Amount');
$spreadsheet->getActiveSheet()->setAutoFilter('A1:D1');
$locations = DB::table('locations')->get();
$locations = json_decode(json_encode($locations),true);
$i = 2;
foreach($locations as $location){
$activeSheet->setCellValue('A'.$i , $location['location']);
$activeSheet->setCellValue('B'.$i , $location['media_vehicle']);
$activeSheet->setCellValue('C'.$i , $location['dimension']);
$activeSheet->setCellValue('D'.$i , $location['amount']);
$i++;
}
$samplepath = storage_path('/excels/sampleExcel'.str_random(5).'.xlsx');
$Excel_writer->save($samplepath);
echo 'saved'; die;
Run Code Online (Sandbox Code Playgroud)
我想要金额列的总计。我想要动态化。如果将来它是 10 行,那么它将计算 10 行的金额列计数。
我已经使用 Composer 安装了该库的最新版本。我创建了一个测试文件来测试库的功能,但是当我尝试解析文件并从中创建数据数组时,出现此错误;
致命错误:未捕获 PhpOffice\PhpSpreadsheet\Reader\Exception:无法在 /home/klik/scripts/PhpSpreadsheet-master/src/PhpSpreadsheet/ 中找到 zip 成员 zip:///home/klik/tmp/php4cfRJH#_rels/.rels Shared/File.php:159
堆栈跟踪:
#0 /home/klik/scripts/PhpSpreadsheet-master/src/PhpSpreadsheet/Reader/Xlsx.php(392): PhpOffice\PhpSpreadsheet\Shared\File::assertFile('/home /klik/tmp/...', '_rels/.rels')
#1 /home/klik/scripts/PhpSpreadsheet-master/test.php(37): PhpOffice\PhpSpreadsheet\Reader\Xlsx->load('/ home/klik/tmp/...')
#2 {main} 扔在/home/klik/scripts/PhpSpreadsheet-master/src/PhpSpreadsheet/Shared/File.php第159行
这是我的test.php文件:
<?php
echo '<!DOCTYPE html>
<html>
<body>
<form method="post" action="test.php" enctype="multipart/form-data">
<div class="form-group">
<label for="exampleInputFile">File Upload</label>
<input type="file" name="file" class="form-control" id="exampleInputFile">
</div>
<button type="submit" name="submit" class="btn btn-primary">Submit</button>
</form>
</body>
</html>';
require_once 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Csv;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
if (isset($_POST['submit'])) {
$file_mimes = array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', …Run Code Online (Sandbox Code Playgroud)我有xlsx表,我使用PhpSpreadsheet来解析它们.一些单元格格式是日期.问题是PhpSpreadsheet以未指定的格式从日期格式的单元格返回值:
// How it looks in excel: 2017.04.08 0:00
$value = $worksheet->getCell('A1')->getValue(); // 42833 - doesn't look like a UNIX time
Run Code Online (Sandbox Code Playgroud)
如何以UNIX时间或DateTimeInterface实例的形式从单元格中获取日期?
我是 PhpSpreadsheet 的新手,我有一个包含多张纸的文件(都是一样的),我检查了文档阅读器部分中的所有示例,但每个示例都以类似的代码结尾
$sheetData = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
Run Code Online (Sandbox Code Playgroud)
所以似乎我只能从活动工作表中获取我的数据。我想遍历每个工作表以从每个工作表中获取数据,例如:
foreach ($sheetData as $sheet) {
echo "...my data ...";
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?我错过了什么吗?谢谢
我已经针对这个问题浏览了多个文档并应用了这些步骤,但到目前为止是徒劳的。我已经编写了 Excel 文件的代码,但我想将其内容放在同一个文件中,并使用 PHPMailer 函数将它们用作 Excel 文件的附件。
下面是我创建excel文件后使用的代码:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
$data = ob_get_contents();
$email->SetFrom('sample@gmail.com', 'Talal Haider'); //Name is optional
$email->Subject = 'Test Mail';
$email->Body = 'Simple Test Email';
$email->AddAddress( 'sample@gmail.com' );
//$email->AddAddress( 'rimsha.cheema@gmail.com' );
$email->AddAttachment($data, 'Inspection_Report.xls' );
if($email->Send()){
echo "Mail Sent";
} else{
echo "Mail Failed";
}
Run Code Online (Sandbox Code Playgroud)
请引导我走向正确的方向。多谢
因为 PHP-Excel 已被弃用,所以 PHP-Spreadsheet 是在 PHP 中制作 Excel 的新选项。文档不是最好的,并且在 Stackoverflow 上关于 PHP-Spreadsheet 的问题也不多,所以这就是为什么我提出这个关于如何在 PHP-Spreadsheet 中将第一行加粗的问题。
我正在尝试使用PHPSpreadsheet(文档)打开受密码保护的 Excel 文件 (.xlsx )。我知道密码,但我找不到打开它的方法。
的load()方法\PhpOffice\PhpSpreadsheet\Reader\Xlsx不能插入密码,当我尝试加载文件时,它会返回错误(当然)。
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadsheet = $reader->load('hello world.xlsx');
$sheet = $spreadsheet->getActiveSheet();
echo $sheet->getCell('A1')->getValue() . "\n";
Run Code Online (Sandbox Code Playgroud)
这是错误
警告:ZipArchive::getFromName():第 311 行 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 Zip 对象无效或未初始化 警告:ZipArchive::getFromName():无效或未初始化的 Zip 对象在 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 第 313 行警告:为 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 foreach() 提供的参数无效第 350 行警告:ZipArchive::getFromName():/PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中的 Zip 对象无效或未初始化,第 311 行警告:ZipArchive::getFromName():无效或313 行 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 中未初始化的 Zip 对象警告:在 /PHPOffice/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 第 397 行中为 foreach() 提供的参数无效警告:ZipArchive::getFromName():/PHPOffice/vendor/phpoffice 中的 Zip 对象无效或未初始化/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php on line 311 警告:ZipArchive::getFromName(): Invalid or uninitialized …
嗨,我是这个名为 PHPSpreadsheet 的库的新手。我尝试阅读它的文档,但我无法理解。
我想在现有的Excel 文件中插入一个新行,这是我目前所拥有的:
<?php
require '../vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$inputFileName = 'Excel/hello.xlsx';
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Updated');
$writer = new Xlsx($spreadsheet);
$writer->save('../controller/excel/hello.xlsx');
?>
Run Code Online (Sandbox Code Playgroud)
这会在 'hello.xsls' 文件中插入新数据,替换单元格的先前数据。如何让它将数据写入新行?