我正在尝试通过在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)在结果中是正确的.
saf*_*rov 78
你不需要通话addSheet()
方法.创建工作表后,它已添加到excel.在这里我修复了一些代码:
//First sheet
$sheet = $objPHPExcel->getActiveSheet();
//Start adding next sheets
$i=0;
while ($i < 10) {
// Add new sheet
$objWorkSheet = $objPHPExcel->createSheet($i); //Setting index when creating
//Write cells
$objWorkSheet->setCellValue('A1', 'Hello'.$i)
->setCellValue('B2', 'world!')
->setCellValue('C1', 'Hello')
->setCellValue('D2', 'world!');
// Rename sheet
$objWorkSheet->setTitle("$i");
$i++;
}
Run Code Online (Sandbox Code Playgroud)
当你第一次实例化$ objPHPExcel时,它已经有一张表(表0); 然后你添加一个新的工作表(它将成为工作表1),但是将活动工作表设置为工作表$ i(当$ i为0时)...所以你要重命名并填充实例化$ objPHPExcel时创建的原始工作表而不是你刚添加的那个...这是你的标题"0".
您还使用了createSheet()方法,该方法都创建了一个新的工作表并将其添加到工作簿中......但您也可以自己再次添加它,这有效地将工作表添加到两个位置.
所以第一次迭代,你已经有了sheet0,在索引1和2处添加了一个新工作表,并编辑/标题工作表0.第二次迭代,你在索引3和4处添加一个新工作表,并编辑/标题工作表1,但是因为你在索引1和2处有相同的工作表,这有效地写入索引2处的工作表.第三次迭代,你在索引5和6处添加一个新工作表,并编辑/标题工作表2,覆盖你之前的工作表编辑/标题1代替了表2 ......等等
小智 7
补充了@Mark Baker的作品.
做如下:
$titles = array('title 1', 'title 2');
$sheet = 0;
foreach($array as $value){
if($sheet > 0){
$objPHPExcel->createSheet();
$sheet = $objPHPExcel->setActiveSheetIndex($sheet);
$sheet->setTitle("$value");
//Do you want something more here
}else{
$objPHPExcel->setActiveSheetIndex(0)->setTitle("$value");
}
$sheet++;
}
Run Code Online (Sandbox Code Playgroud)
这对我有用.并希望它适合那些需要的人!:)
归档时间: |
|
查看次数: |
109352 次 |
最近记录: |