我有大量的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)
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"列
请帮我...
非常感谢提前
我正在使用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, …
致命错误:第269行的D:\ xampplite\htdocs\Scraper\PHPExcel\Reader\Excel2007.php中允许的内存大小为134217728字节(试图分配1078799字节)
即使我只是尝试使用PHPExcel打开一个约350 KB的小excel文件,我的128M PHP内存限制很快就会耗尽.
虽然,我可以增加配置中的内存限制,但是看看是否有任何替代方法来解决这个问题会很棒.
我知道如何阅读我的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) 我正在尝试通过在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)在结果中是正确的.
我不明白.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) 我是从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) PHPExcel $ cell-> getColumn()返回'A','B','C',...
这是从单元格中获取整数(0,1,2,...)的最佳方法.
此功能不存在.
$colIndex = $cell->getColumnIndex();
Run Code Online (Sandbox Code Playgroud)
那么将chr转换为ascii的替代方案是什么?
我已经检查了很多网站以解决我的问题,但找不到合适的解决方案.我想插入一个公式来计算学生获得的商标总数.标记将由教师输入.我写了从数据库和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)