【问题标题】:How to created w readable Excel file with PHP Excel如何使用 PHP Excel 创建可读的 Excel 文件
【发布时间】:2017-05-19 15:30:38
【问题描述】:

我一直在使用 PHPExcel 从 csv 文件创建电子表格。除了 Excel 文件被标记为只读之外,我已经能够让它完美地工作。我浏览了该课程的 GitHub 问题,并在此板上进行了搜索,但找不到与此问题相关的任何人。

PHPExcel 可以写一个没有标记为只读的 Excel 文件吗? 这是我的代码。如您所见,我已尝试将所有工作表保护和锁定选项标记为 false。

<?php /** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);
define('EOL', (PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
date_default_timezone_set('Europe/London');
echo "<h1>FINDLAY FOODS Product List CSV Import to Excel</h1><br /><br />";
/** Include PHPExcel */
require_once dirname(__file__) . '/../Classes/PHPExcel.php';

// Create new PHPExcel object
echo date('H:i:s'), " Create new PHPExcel object", EOL;
$objPHPExcel = new PHPExcel();
// Set document properties
echo date('H:i:s'), " Set properties", EOL;
$objPHPExcel->getProperties()->setCreator("Findlay Foods")->setLastModifiedBy("Findlay Foods")->setTitle("Prod_List_Test_1")->
    setSubject("PRod List Test")->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")->
    setKeywords("office 2007 openxml php")->setCategory("Test result file");
echo date('H:i:s'), " Add data", EOL;
$objPHPExcel->setActiveSheetIndex(0);

$new_array = array();
$row = 1;

$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Code');
$objPHPExcel->getActiveSheet()->setCellValue('B1', 'True');
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Rebate');
$objPHPExcel->getActiveSheet()->setCellValue('D1', 'Break');
$objPHPExcel->getActiveSheet()->setCellValue('E1', 'Portion');
$objPHPExcel->getActiveSheet()->setCellValue('F1', 'Unit');
if (($handle = fopen("prodlist.csv", "r")) !== false)
{
    while (($data = fgetcsv($handle, 1000, ",")) !== false)
    {
        $row++;
        for ($c = 0; $c < 1; $c++)
        {
            $fcode = trim(str_pad($data[0], 5, "0", STR_PAD_LEFT));
            $fcode = (float)$fcode;
            $true = trim($data[1]);
            $true = (float)$true;
            $true = number_format($true, 2, '.', '');
            $rebate = trim($data[2]);
            $bf = trim($data[3]);
            $str = trim($data[4]);
            $portion = filter_var($str, FILTER_SANITIZE_NUMBER_INT);
            $size = strtolower(preg_replace("/[0-9]/", "", $str));
            $size = strtolower(preg_replace("/\./", "", $size));
            $objPHPExcel->getActiveSheet()->setCellValue('A' . $row, $fcode);
            $objPHPExcel->getActiveSheet()->getStyle('A' . $row)->getNumberFormat()->setFormatCode('0000#');
            $objPHPExcel->getActiveSheet()->setCellValue('B' . $row, $true);
            $objPHPExcel->getActiveSheet()->getStyle('B' . $row)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue('C' . $row, $rebate);
            $objPHPExcel->getActiveSheet()->getStyle('C' . $row)->getNumberFormat()->setFormatCode('#,##0.00');
            $objPHPExcel->getActiveSheet()->setCellValue('D' . $row, $bf);
            $objPHPExcel->getActiveSheet()->setCellValue('E' . $row, $portion);
            $objPHPExcel->getActiveSheet()->setCellValue('F' . $row, $size);
        }
    }
    fclose($handle);
}
// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->getProtection()->setSort(false);
$objPHPExcel->getActiveSheet()->getProtection()->setInsertRows(false);
$objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(false);
$objPHPExcel->getSecurity()->setLockWindows(false);
$objPHPExcel->getSecurity()->setLockStructure(false);

echo date('H:i:s'), " Write to Excel5 format", EOL;
$callStartTime = microtime(true);

$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->setOffice2003Compatibility(true);
$objWriter->save(str_replace(__file__, '/../data/list/findlay-prodlist.xlsx', __file__));
$callEndTime = microtime(true);
$callTime = $callEndTime - $callStartTime;
echo date('H:i:s'), " File written to ", str_replace('.php', '.xls', pathinfo(__file__, PATHINFO_BASENAME)),
    EOL;
echo 'Call time to write Workbook was ', sprintf('%.4f', $callTime), " seconds", EOL;
// Echo memory usage
echo date('H:i:s'), ' Current memory usage: ', (memory_get_usage(true) / 1024 / 1024), " MB", EOL;`enter code here`
// Echo memory peak usage
echo date('H:i:s'), " Peak memory usage: ", (memory_get_peak_usage(true) / 1024 / 1024), " MB", EOL;
// Echo done
echo date('H:i:s'), " Done writing file", EOL;
echo 'File has been created in ', getcwd(), EOL; ?>

【问题讨论】:

    标签: php csv phpexcel


    【解决方案1】:

    打开后“另存为”。

    编辑:对不起,也许我误解了这个问题。为了扩展我的答案,您解决的保护措施等在文件“内部”。只读状态由操作系统设置。需要处理的是文件权限。无论您在哪里创建文件,都必须是用户读取它的可写目录。如果通过浏览器下载,同样适用。

    【讨论】:

    • 感谢您的回答,我不确定您的意思。我没有打开 Excel 文件,我只是在写一个。
    • 好的,这有点道理,我将检查我的目标文件夹,我将它保存到 linux 服务器上的 Samba 共享。 samba 共享是读/写的,但是当我将该文件夹视为 Windows 映射驱动器时,我看到该文件夹​​是只读的。感谢您的提示。
    猜你喜欢
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多