使用php 电子表格
有没有办法用密码保护 Excel 工作表,使用户没有密码就无法读取?
我知道你可以保护单元格或工作表不被写入,但我正在寻找一种方法来保护整个文件不被打开,一旦用户打开它,它会弹出“输入密码”屏幕
如何找出使用PHPSpreadsheet\Reader\Xlsx::load()方法加载了多少行?
我找不到在Spreadsheet或Worksheet类中获取行数的方法(或属性).
BTW我使用以下代码:
$filename = 'test.xlsx';
$inputFileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($filename);
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
$reader->setReadDataOnly(true);
$reader->setLoadSheetsOnly($sheet);
$this->spreadsheet = $reader->load($filename);
$this->worksheet = $this->spreadsheet->getActiveSheet();
Run Code Online (Sandbox Code Playgroud) 由于多种原因,我无法在服务器上运行composer。有什么方法可以包含使用该库所需的所有文件吗?
我正在使用 PhpSpreahSheet 读取多个 Excel 文件并将它们合并到一个文件中。我用以下代码读取我的文件:
$readerData = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadData = $readerData->load("File/file1.xlsx");
$readerData = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$spreadData = $readerData->load("File/file2.xlsx");
Run Code Online (Sandbox Code Playgroud)
然后,我使用 php 中的 array_merge :
$mergeFileData = array_merge($sheetConfig, $sheetData);
Run Code Online (Sandbox Code Playgroud)
然后我将数组写入一个新文件:
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->fromArray($mergeFileDataEnd);
$writer = new Xlsx($spreadsheet);
$writer->save('mergedFile.xlsx');
Run Code Online (Sandbox Code Playgroud)
问题是,当我执行这段代码时,生成合并文件的速度非常慢,对于excel文件,每个文件都有超过20k行和30列要生成excel,我必须增加服务器的内存和执行时间限制为 30 秒...
您有优化执行时间的想法吗?
编辑:事实上,生成我的 Excel 文件需要 10 分钟......
$eanStyle = new \PHPExcel_Style();
$eanStyle->getNumberFormat()->applyFromArray([
'code' => '0000000000000'
]);
/* apply styles */
$mainSheet->duplicateStyle($eanStyle, 'A2:A10000');
Run Code Online (Sandbox Code Playgroud)
上面的代码生成.xlsx模板文件,用户输入数据(7行)并上传文件,然后:
$mainSheet->getHighestRow('A'); // retruns 10000 instead of 8 (7 rows + header)
Run Code Online (Sandbox Code Playgroud)
预先感谢您的帮助。
好吧,除了对我来说很神秘的 API 文档之外,我没有找到任何有关图表的文档,因此,如果任何 PHPspreadsheet 看到此内容,请考虑记录此类。我的问题是如何绘制饼图并将其实现到Excel表中,直接查看或将其保存到文件或所有以前的文件(如果可能)
Excel中的默认行高是-1,在Excel中显示为15。添加内容后,行高会自动调整为15.75。因此,我为所有行设置了新的默认行高,15。尽管如此,行高仍然会自动调整大小。然后,我尝试设置 中所有行的行高$sheet->getRowDimensions()。中没有内容$sheet->getRowDimensions()。所以,$rd->setRowHeight(15)不生效。
$default_rowdimensions =$sheet->getDefaultRowDimension();
$set_newdefaultrowheight=$sheet->getDefaultRowDimension()->setRowHeight(15);
Run Code Online (Sandbox Code Playgroud)
$rowdimension = $sheet->getRowDimensions();
echo '<pre>;
var_dump($rowdimension);
echo '</pre>';
foreach($rowdimension as $rd)
{
$rd->setRowHeight(15);
}
Run Code Online (Sandbox Code Playgroud)
在写入 Excel 之前,还有其他方法可以设置所有行的行高吗?
提前致谢。
我使用 PhpSpreadsheet 生成 XLS 文件,所有功能都运行完美,除了它将本地文件保存在临时目录中并且我想将它们保存在特定文件夹中。
use PhpOffice\PhpSpreadsheet\IOFactory;
require __DIR__ . '/Header.php';
$spreadsheet = require __DIR__ . '/templates/MyTemplate.php';
$filename = $helper->getFilename("MyFilename", 'xls');
$writer = IOFactory::createWriter($spreadsheet, 'Xls');
$callStartTime = microtime(true);
$writer->save($filename);
$helper->logWrite($writer, $filename, $callStartTime);
Run Code Online (Sandbox Code Playgroud)
但输出位于
Write Xls format to /var/folders/pn/lyj970q90lq20mjv39bpgx_80000gn/T/phpspreadsheet/MyFilename.xls in 0.0640 seconds
Run Code Online (Sandbox Code Playgroud)
是否有其他功能可以设置我想要文件的保存目录?
我正在使用 phpspreadsheet v1.3.1。
我正在构建一个 Excel 文件(下载),一切正常。唯一的问题是定义 setPrintArea...它总是将标准 PrintArea 返回到 excel 中。基本上,我构建了 Excel 行并在定义 printArea 之后...我之前也尝试过这样做,但没有成功。
$spreadsheet = IOFactory::load("template.xlsx");
$worksheet = $spreadsheet->getActiveSheet();
foreach ($rows AS $k => $v ) {
$worksheet->getCell('F' . ($k + 3))->setValue($v);
$worksheet->getCell('G' . ($k + 3))->setValue($v);
}
$worksheet->getPageSetup()->setPrintArea('A1:AG58');
...
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $filename . '"');
header('Cache-Control: max-age=0');
$writer = IOFactory::createWriter($spreadsheet, 'Xls');
$writer->save('php://output'); //-- force download version
Run Code Online (Sandbox Code Playgroud)
该区域有 58 行,但我无法将区域设置为“AG”单元格...基本上,我想在一页上打印所有 excel,而不是打印到 8 行。
谢谢 !
我试图设置特定列或整个电子表格的默认格式。我正在使用PhpOffice\PhpSpreadsheet包来创建 Excel 电子表格。有没有办法一次性设置整张纸或整列的格式?
下面是我如何使用该库的代码片段:
require_once 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
// Create new Spreadsheet object
$spreadsheet = new Spreadsheet();
// Set document properties
$spreadsheet->getProperties()->setCreator('Someone')
->setLastModifiedBy('Someone Else')
->setTitle('XLSX Test Document')
->setSubject('Office 2007 XLSX Test Document')
->setDescription('PhpOffice')
->setKeywords('PhpOffice')
->setCategory('PhpOffice');
$header = [
"Order No",
"ID",
"Salutaion",
"First Name",
"Last Name",
"Address"
];
$rows = [
[
"SDKJFBHIDUF",
"23123156478978945",
"Mr.",
"John",
"Doe",
"101, Lorem Ipsum"
]
];
$sheet = $spreadsheet->getActiveSheet();
$sheet->setTitle('Orders');
$sheet->fromArray($header, null, 'A1');
$sheet->fromArray($rows, null, 'A2');
$spreadsheet->setActiveSheetIndex(0);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: …Run Code Online (Sandbox Code Playgroud) phpspreadsheet ×10
php ×7
excel ×4
phpoffice ×2
composer-php ×1
passwords ×1
phpexcel ×1
spreadsheet ×1
time ×1