您能否指导我或为我提供一些使用PHPExcel库执行CSV导出和导入的示例代码?
Excel导出和导入很好,但我也需要CSV导出/导入.我还有其他CSV导出和导入方法,但是也可以通过PHPExcel完成吗?
鉴于:
$this->objPHPExcelReader = PHPExcel_IOFactory::createReaderForFile($this->config['file']);
$this->objPHPExcelReader->setLoadSheetsOnly(array($this->config['worksheet']));
$this->objPHPExcelReader->setReadDataOnly(true);
$this->objPHPExcel = $this->objPHPExcelReader->load($this->config['file']);
Run Code Online (Sandbox Code Playgroud)
我可以迭代这样的行,但它很慢,即在3MB的Excel文件中,工作表有"EL"列,每行大约需要1秒:
foreach ($this->objPHPExcel->setActiveSheetIndex(0)->getRowIterator() as $row)
{
$dataset = array();
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
foreach ($cellIterator as $cell)
{
if (!is_null($cell))
{
$dataset[] = $cell->getCalculatedValue();
}
}
$this->datasets[] = $dataset;
}
Run Code Online (Sandbox Code Playgroud)
当我像这样迭代时,它显着更快(在30秒内大约2000行),但我必须将字母例如"EL"转换为数字:
$highestColumm = $this->objPHPExcel->setActiveSheetIndex(0)->getHighestColumn(); // e.g. "EL"
$highestRow = $this->objPHPExcel->setActiveSheetIndex(0)->getHighestRow();
$number_of_columns = 150; // TODO: figure out how to get the number of cols as int
for ($row = 1; $row < $highestRow …Run Code Online (Sandbox Code Playgroud) 如何进行基于Excel工作表列的循环?我发现(和使用过)WorksheetIterator,RowIterator和CellIterator但没有关于列.
我正在尝试从下面的代码生成扩展名为.xlsx的excel文件.我能够很好地下载文件但是当我用excel表打开它时,我收到以下警告错误.Excel无法打开文件'dindi.xlsx',因为文件格式或文件扩展名无效.确保文件未损坏且文件扩展名与文件格式匹配.当我用记事本打开它时,该文件出现以下错误:
注意:ob_end_clean()[ref.outcontrol]:无法删除缓冲区.没有要删除的缓冲区
以下是我正在尝试做的代码.
public function exportResults() {
$this -> load -> database();
$query = $this -> db -> query("
SELECT * FROM farm LIMIT 10");
$results = $query -> result_array();
$objPHPExcel = new Excel();
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objPHPExcel = $objReader->load('./files/farmdetails.xlsx');
$objPHPExcel ->getActiveSheet()->setTitle('farmreport');
$objPHPExcel -> setActiveSheetIndex(0);
$i = 1;
foreach ($results as $result) {
$objPHPExcel -> getActiveSheet() -> SetCellValue('A' . $i, $result["name"]);
$objPHPExcel -> getActiveSheet() -> SetCellValue('B' . $i, $result["dateofcontract"]);
$objPHPExcel -> getActiveSheet() -> SetCellValue('C' . $i, $result["leasorname"]);
$objPHPExcel -> getActiveSheet() …Run Code Online (Sandbox Code Playgroud) 我正在使用PHPExcel库,我正在创建用于写入或读取的xls对象:
PHPExcel_IOFactory::createReaderForFile('file.xlsx')
PHPExcel_IOFactory::createWriter('Excel2007')
如何打开XLSX文件进行读写?
我正在尝试使用PHP创建一个包含电话号码列表的文件.它工作正常但是如果电话号码从零开始,则从Excel文件中删除该数字.
有没有人知道如何正确设置格式,以便它保持原样?
我正在尝试使用PHPExcel从excel获取Date.但我没有得到约会,我得到的字符串值不是1970年的秒数.
我试过的代码是
$InvDate=trim($excel->getActiveSheet()->getCell('B' . $i)->getValue());
Run Code Online (Sandbox Code Playgroud) 我正在使用PHPExcel导出数据以供下载.打开下载的文件时,如果单元格数量较大,则显示"#######"而不是值编号.我尝试setAutoSize()了每个列,然后调用,$sheet->calculateColumnWidths()但它仍然没有变化.我在这里看到calculateColumnWidths(),@ Mark Baker说"calculateColumnWidths()将值增加5%,以确保整个列适合".如果单元格中的数字长度超过5%,那么似乎已经解决了问题
更新 这是我自动调整列的功能:
function autoFitColumnWidthToContent($sheet, $fromCol, $toCol) {
if (empty($toCol) ) {//not defined the last column, set it the max one
$toCol = $sheet->getColumnDimension($sheet->getHighestColumn())->getColumnIndex();
}
for($i = $fromCol; $i <= $toCol; $i++) {
$sheet->getColumnDimension($i)->setAutoSize(true);
}
$sheet->calculateColumnWidths();
}
Run Code Online (Sandbox Code Playgroud) 我使用以下代码为所有边框
$BStyle = array(
'borders' => array(
'allborders' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN
)
)
);
Run Code Online (Sandbox Code Playgroud)
我在这里使用
$objPHPExcel->getActiveSheet()->getStyle('A8:L8')->applyFromArray($BStyle);
Run Code Online (Sandbox Code Playgroud)
但是我如何给出外边框如下面给出的屏幕

我有大量的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)