标签: phpexcel

如何使用PHPExcel从大型Excel文件(27MB +)中读取大型工作表?

我有大量的Excel工作表,我希望能够使用PHPExcel读入MySQL.

我正在使用最近的补丁,它允许您在不打开整个文件的情况下读取工作表.这样我就可以一次阅读一个工作表.

但是,一个Excel文件大27MB.我可以成功阅读第一个工作表,因为它很小,但第二个工作表是如此之大,以至于22:00启动进程的cron作业在上午8:00没有完成,工作表很简单.

是否有任何方法可以逐行读取工作表,例如:

$inputFileType = 'Excel2007';
$inputFileName = 'big_file.xlsx';
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$worksheetNames = $objReader->listWorksheetNames($inputFileName);

foreach ($worksheetNames as $sheetName) {
    //BELOW IS "WISH CODE":
    foreach($row = 1; $row <=$max_rows; $row+= 100) {
        $dataset = $objReader->getWorksheetWithRows($row, $row+100);
        save_dataset_to_database($dataset);
    }
}
Run Code Online (Sandbox Code Playgroud)

附录

@mark,我使用您发布的代码创建以下示例:

function readRowsFromWorksheet() {

    $file_name = htmlentities($_POST['file_name']);
    $file_type = htmlentities($_POST['file_type']);

    echo 'Read rows from worksheet:<br />';
    debug_log('----------start');
    $objReader = PHPExcel_IOFactory::createReader($file_type);
    $chunkSize = 20;
    $chunkFilter = new ChunkReadFilter();
    $objReader->setReadFilter($chunkFilter);

    for ($startRow = 2; $startRow <= …
Run Code Online (Sandbox Code Playgroud)

php phpexcel

27
推荐指数
2
解决办法
5万
查看次数

PHPExcel使用多个工作表修改现有的.xlsx文件


require_once '../Classes/PHPExcel/IOFactory.php';


/** PHPExcel */require_once '../Classes/PHPExcel.php';

$excel2 = PHPExcel_IOFactory::createReader('Excel2007');
$excel2 = $excel2->load('dentkey.xlsx');
$excel2->setLoadAllSheets();
$excel2->setActiveSheetIndex(0);
$excel2->getActiveSheet()->setCellValue('C6', '4')           

->setCellValue('C7', '5')         

  ->setCellValue('C8', '6')       

    ->setCellValue('C9', '7');
$excel2->setActiveSheetIndex(1);
$excel2->getActiveSheet()->setCellValue('A7', '4')

->setCellValue('C7', '5');


$objWriter = PHPExcel_IOFactory::createWriter($excel2, 'Excel2007');
$objWriter->save('dentkey1.xlsx');


Run Code Online (Sandbox Code Playgroud)

在这里,我能够加载(.xlsx)文件,我也能够修改(dentkey.xlsx).但是在生成新的.xlsx文件(dentkey1.xlsx)之后..(dentkey.xlsx)中的所有工作表数据都没有加载,我也无法为第二个工作表设置值.

你可以

$excel2->setActiveSheetIndex(1);
$excel2->getActiveSheet()->setCellValue('A7', '4')

->setCellValue('C7', '5');
Run Code Online (Sandbox Code Playgroud)

未将生成(dentkey.xlsx)文件的值5设置为"C7"列

请帮我...

非常感谢提前

php wordpress phpexcel

26
推荐指数
1
解决办法
6万
查看次数

PHPExcel_Writer_Exception,消息"无法关闭zip文件php://输出."

我正在使用PHPExcel将一些数据导出到excel文件中的用户.我希望脚本在创建后立即将excel文件发送给用户.这是我的测试代码:

try{

  /* Some test data */
  $data = array(
    array(1, 10   , 2             ,),
    array(3, 'qqq', 'some string' ,),
  );

  $objPHPExcel = new PHPExcel();
  $objPHPExcel->setActiveSheetIndex(0);

  /* Fill the excel sheet with the data */
  $rowI = 0;
  foreach($data as $row){
    $colI = 0;
    foreach($row as $v){
      $colChar = PHPExcel_Cell::stringFromColumnIndex($colI++);
      $cellId = $colChar.($rowI+1);
      $objPHPExcel->getActiveSheet()->SetCellValue($cellId, $v);
    }
    $rowI++;
  }

  header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  header('Content-Disposition: attachment;filename="export.xlsx"');
  header('Cache-Control: max-age=0');

  $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  $objWriter->save('php://output');

}catch(Exception $e){
  echo $e->__toString();
}
Run Code Online (Sandbox Code Playgroud)

在我的本地服务器上,(Windows 7 x64, Php 5.3.8, …

php phpexcel ziparchive

26
推荐指数
3
解决办法
6万
查看次数

如何使用PHPExcel修复内存耗尽?

致命错误:第269行的D:\ xampplite\htdocs\Scraper\PHPExcel\Reader\Excel2007.php中允许的内存大小为134217728字节(试图分配1078799字节)

即使我只是尝试使用PHPExcel打开一个约350 KB的小excel文件,我的128M PHP内存限制很快就会耗尽.

虽然,我可以增加配置中的内存限制,但是看看是否有任何替代方法来解决这个问题会很棒.

php memory-management phpexcel

24
推荐指数
2
解决办法
5万
查看次数

如何使用PHPExcel读取xlsx文件的第二张表?

我知道如何阅读我的xlsx电子表格并循环浏览第一张表格.

它有5张,我遇到的不是第一张.

这是我正在使用的代码,它直接来自文档.你可以看到我试图利用setActiveSheet,但这引发了错误Call to undefined method PHPExcel::setActiveSheet().

代码:

$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load("cmt_school_data.xlsx");
//$objPHPExcel->setActiveSheet(1);
$objWorksheet = $objPHPExcel->getActiveSheet();

echo '<table border=1>' . "\n";

foreach ($objWorksheet->getRowIterator() as $row) {

  echo '<tr>' . "\n";

  $cellIterator = $row->getCellIterator();

  // This loops all cells, even if it is not set.
  // By default, only cells that are set will be iterated.
  $cellIterator->setIterateOnlyExistingCells(false);

  foreach ($cellIterator as $cell) {
    echo '<td>' . $cell->getValue() . '</td>' . "\n";
  }

  echo '</tr>' . "\n"; …
Run Code Online (Sandbox Code Playgroud)

php import-from-excel phpexcel

24
推荐指数
2
解决办法
5万
查看次数

PHPExcel - 通过迭代创建多个工作表

我正在尝试通过在phpexcel中迭代创建多个工作表:

$i=0;

while ($i < 10) {

// Add new sheet
$objWorkSheet = $objPHPExcel->createSheet();

//  Attach the newly-cloned sheet to the $objPHPExcel workbook
$objPHPExcel->addSheet($objWorkSheet);

// Add some data
$objPHPExcel->setActiveSheetIndex($i);

$sheet = $objPHPExcel->getActiveSheet();

$sheet->setCellValue('A1', 'Hello'.$i)
        ->setCellValue('B2', 'world!')
        ->setCellValue('C1', 'Hello')
        ->setCellValue('D2', 'world!');

// Rename sheet
$sheet->setTitle($i);

$i++;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.我只得到一些填充了数据并重命名的迭代表,大约一半是空的.

所以这是结果(工作表标题):

0,2,4,6,8,9和5个空床单

我无法弄清楚为什么只有偶数(和表9)在结果中是正确的.

php phpexcel

24
推荐指数
3
解决办法
11万
查看次数

PHPExcel用完了256,512和1024MB的RAM

我不明白.XSLX表大约3MB,甚至1024MB的RAM还不足以让PHPExcel将其加载到内存中?

我可能在这里做了一些可怕的错误:

function ReadXlsxTableIntoArray($theFilePath)
{
    require_once('PHPExcel/Classes/PHPExcel.php');
    $inputFileType = 'Excel2007';
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    $objReader->setReadDataOnly(true);
    $objPHPExcel = $objReader->load($theFilePath);
    $rowIterator = $objPHPExcel->getActiveSheet()->getRowIterator();
    $arrayData = $arrayOriginalColumnNames = $arrayColumnNames = array();
    foreach($rowIterator as $row){
        $cellIterator = $row->getCellIterator();
        $cellIterator->setIterateOnlyExistingCells(false); // Loop all cells, even if it is not set
        if(1 == $row->getRowIndex ()) {
            foreach ($cellIterator as $cell) {
                $value = $cell->getCalculatedValue();
                $arrayOriginalColumnNames[] = $value;
                // let's remove the diacritique
                $value = iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $value);
                // and white spaces
                $valueExploded = explode(' ', $value);
                $value = …
Run Code Online (Sandbox Code Playgroud)

php phpexcel

23
推荐指数
3
解决办法
5万
查看次数

在php中的phpexcel中将图像添加到Excel中

我是从phpexcel那里得到的例子

我只是尝试在GET方法中传递值,我完成了.

现在我想在a3 coloumn中添加图像.

参考代码 :

<?php
$value = $_GET['value'];
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/London');

if (PHP_SAPI == 'cli')
    die('This example should only be run from a Web Browser');

require_once dirname(__FILE__) . '/Classes/PHPExcel.php';


$objPHPExcel = new PHPExcel();


$objPHPExcel->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");


$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', $value)
            ->setCellValue('B2', 'world!')
            ->setCellValue('C1', 'Hello')
            ->setCellValue('D2', 'world!'); …
Run Code Online (Sandbox Code Playgroud)

php phpexcel phpexcelreader

23
推荐指数
3
解决办法
6万
查看次数

PHPExcel如何从单元格中获取列索引

PHPExcel $ cell-> getColumn()返回'A','B','C',...

这是从单元格中获取整数(0,1,2,...)的最佳方法.

此功能不存在.

$colIndex = $cell->getColumnIndex();
Run Code Online (Sandbox Code Playgroud)

那么将chr转换为ascii的替代方案是什么?

php phpexcel

22
推荐指数
2
解决办法
5万
查看次数

如何使用phpexcel在excel表中插入公式

我已经检查了很多网站以解决我的问题,但找不到合适的解决方案.我想插入一个公式来计算学生获得的商标总数.标记将由教师输入.我写了从数据库和maxmarks插入学生姓名后下载excel文件的php代码.我的excel文件看起来像这样看到图像因为我没有10个声誉我不允许在帖子中插入图片,请点击此链接http://cbsecsnip.in/Capture.JPG 标记栏是空白的,老师将在标记其他数据从数据库中获取,百分比列需要一个公式,当教师输入标记时,该公式将自动计算标记.填充列和百分比列受到保护.我使用PHPExcel.这是生成此excel文件的php代码

<?php
$host='localhost'; $user='vishal'; $pass='*****'; $DataBase='school';//define the correct values
// open the connexion to the databases server
$Link=@mysqli_connect($host,$user,$pass,$DataBase) or die('Can\'t connect !');
mysqli_set_charset($Link, 'utf8');//if not by default

//your request
$SQL="SELECT `admissionnumber`,`pre_name`,`pre_fathersoccupation`,`pre_motheroccupation` FROM `es_preadmission` WHERE `pre_class`=25 AND `pre_fromdate`>='2014-04-01' AND `pre_todate`<='2015-03-31'";
$rs=mysqli_query($Link, $SQL);//get the result (ressource)
$SQL1="SELECT a.`total_marks`,a.`pass_marks`,b.es_subjectname FROM `es_exam_details` as a JOIN `es_subject` as b ON a.`subject_id`=b.`es_subjectid` JOIN es_exam_academic as c ON c.es_exam_academicid=a.academicexam_id WHERE es_subjectshortname=25";
$rs1=mysqli_query($Link, $SQL1);//get the result (ressource)
$SQL2="SELECT distinct(b.es_subjectname) as subjects FROM `es_exam_details` as a JOIN …
Run Code Online (Sandbox Code Playgroud)

php phpexcel

22
推荐指数
2
解决办法
6万
查看次数