PHP
导出数据行有三万多行,xls
导出是没问题的,但是十月 fputcsv
方法导出的csv
格式后,会少30行数据,这里使用csv导出时是分批次拉取数据写入的,每次1000条。查了网上说有可能是字符集的问题,但是通过和xlsx
比对之后的30条数据再单独使用csv导出却是可以直接导出的。
$data_total = $this->getExportDataTotal();
$pageSize = 2000;
$pageNum = ceil($data_total / $pageSize);
for ($page = 1; $page <= $pageNum; $page++) {
if (ob_get_length()) {
ob_end_clean();
}
//表头标题
if ($page == 1) {
// 标题
$column_title = "公司ID#公司名称";
$column_title = explode('#', $column_title);
foreach ($column_title as $i => $v) {
$column_title[$i] = iconv('UTF-8', 'GBK//IGNORE', $v);
}
fputcsv($fp, $column_title);
// 字段
$column_fields = 'COMPANY_ID#COMPANY_NAME';
$column_fields = explode('#', $column_fields);
foreach ($column_fields as $i => $v) {
$column_fields[$i] = iconv('UTF-8', 'GBK//IGNORE', $v);
}
fputcsv($fp, $column_fields);
}
$filter_data['start'] = ($page - 1) * $pageSize;
$filter_data['limit'] = $pageSize;
$orders = $this->getExportDatas($filter_data);
$export_data = array();
foreach ($orders as $key => $val) {
if ($val) {
$tmp = $val;
$export_data[] = $tmp;
unset($orders[$key]);
}
}
// 数据
foreach ($export_data as $item) {
$element = array();
foreach ($column_fields as $field) {
$element_str = isset($item[$field]) ? iconv('UTF-8', 'GBK//IGNORE', $item[$field]) : '';
$element[] = $element_str;
}
fputcsv($fp, $element, ',', '"');
}
// 将已经写到csv中的数据存储变量销毁,释放内存占用
unset($export_data);
}
1、用文本编辑器打开cvs,看下是否有少、是否有些特殊字符
2、确认3万多行,每次1000 ,少30 行,是否为每次少了一行