php 导出excel CVS格式

PHP导出CSV格式实战
本文介绍了一种使用PHP进行CSV格式数据导出的方法。通过具体示例代码展示了如何构造和导出包含多条记录的CSV文件。文章还涉及了如何处理中文字符编码问题,确保在Excel中正确显示。

php  excel导出 CVS格式  乐杨俊

 

<?php

  $param=array();   //模拟导出数据
  $param [1] = array (
   'po' => '651651616',
            'pick_mode' => '1',
            'auto_add_goods' => '0',
            'type' => 'jit',
            'schedule_time' => '20013-00-00',
            'num' => '25045',
            'sale_num' => '2054',
            'unpick_num' => '6234',
            'warehouse_name' => 'bj', );
  $param [2] = array (
   'po' => '651651612',
            'pick_mode' => '1',
            'auto_add_goods' => '0',
            'type' => 'jit2',
            'schedule_time' => '20013-00-002',
            'num' => '2502',
            'sale_num' => '20267',
            'unpick_num' => '622',
            'warehouse_name' => 'bj2',
  );
  $param [3] = array (
   'po' => '651651613',
            'pick_mode' => '1',
            'auto_add_goods' => '0',
            'type' => 'jit3',
            'schedule_time' => '20013-00-003',
            'num' => '2503',
            'sale_num' => '203',
            'unpick_num' => '6236',
            'warehouse_name' => 'bj3',
  );
  $param [4] = array (
   'po' => '651651614',
            'pick_mode' => '1',
            'auto_add_goods' => '0',
            'type' => 'jit4',
            'schedule_time' => '20013-00-004',
            'num' => '2504',
            'sale_num' => '204',
            'unpick_num' => '6246',
            'warehouse_name' => 'bj4',
  );
  $param [5] = array (
   'po' => '812231134',
            'pick_mode' => '0',
            'auto_add_goods' => '1',
            'type' => 'jit5',
            'schedule_time' => '2013-00-004',
            'num' => '8888',
            'sale_num' => '8848',
            'unpick_num' => '6000',
            'warehouse_name' => 'BJ',
  );

  $name='leyangjun';
  $filename = mb_convert_encoding($name, 'gb2312', 'utf-8');
        $title = array(
            'po' => 'PO单编号',
            'pick_mode' => '拣货方式',
            'auto_add_goods' => '自动补货',
            'type' => '合作模式',
            'schedule_time' => '档期时间',
            'num' => '虚拟总库存',
            'sale_num' => '销售数',
            'unpick_num' => '未拣货',
            'warehouse_name' => '仓库',
        );
       $ii = 0;
        if (!empty($param)) {
            foreach ($param as $key => $val) {
                $val['type'] = isset($val['type']) ? $val['type'] : '';
                $val['schedule_time'] = isset($val['sell_time_from']) || isset($val['sell_time_to']) ? ($val['sell_time_from'] . '—' . $val['sell_time_to']) : '';
                $val['pick_mode'] = isset($val['pick_mode']) ? ($val['pick_mode'] > 1 ? '分类' : '普通') : '';
                $val['auto_add_goods'] = isset($val['auto_add_goods']) ? ($val['auto_add_goods'] > 0 ? '开启' : '关闭') : '';
                $val['schedule_time'] = isset($val['schedule_time']) ? ($val['schedule_time'] == '0000-00-00 00:00:00—0000-00-00 00:00:00' ? '' : $val['schedule_time']) : '';

                foreach ($title as $tk => $tv) {
                    if (!isset($val[$tk])) {
                        $val[$tk] = '';
                    }
                    $list[$ii][] = $val[$tk];
                }
                $ii++;
            }
        }

        //未设置给默认--防报错
        if (!isset($list)) {
            $list[0][0] = "";
            $list[0][1] = "";
            $list[0][2] = "";
            $list[0][3] = "";
            $list[0][4] = "";
            $list[0][5] = "";
            $list[0][6] = "";
            $list[0][7] = "";
            $list[0][8] = "";
            $list[0][9] = "";
            $list[0][10] = "";
        }

        //表头数据
        $headerDate = array_values($title);
        //内容体数据
        $bodyData = $list;

        //设置工作区名称
        $sheetName = 'Jit_po列表详情';
        //设置要导出的excel文件名
  
        $fileName = $name;
        //设置要导出的excel文件后缀名,支持xls和xlsx
        $fileExt = 'xls';
        //调用类库导出excel
        //ini_set('memory_limit', '512M');     
   //cvs格式 
    to_csv($fileName, $headerDate, $bodyData, array(0, 10, 14, 15), $flag=1);
   

 

  //CVS格式
/*  
 function to_csv($file_name, $headerDate, $bodyData, $array_text, $flag) {

        // 输出Excel文件头,可把user.csv换成你要的文件名 
        if (!headers_sent()) {
            header('Content-Type: application/vnd.ms-excel');
            header('Content-Disposition: attachment;filename="' . $file_name . '.csv"');
            header('Cache-Control: max-age=0');
        }
        // 打开PHP文件句柄,php://output 表示直接输出到浏览器 
        $fp = fopen('php://output', 'a');
        foreach ($headerDate as $i => $v) {
            // CSV的Excel支持GBK编码,一定要转换,否则乱码 
            $headerDate[$i] = iconv('utf-8', 'gbk', $v);
        }
        // 将数据通过fputcsv写到文件句柄   
        if ($flag == 1) {
            fputcsv($fp, $headerDate);
        }
        // 逐行取出数据,不浪费内存 
        foreach ($bodyData as $row) {
            foreach ($row as $i => $v) {
                $row[$i] = iconv('utf-8', 'gbk', $v);
                if (in_array($i, $array_text)) {
                    $row[$i] = "\t" . $row[$i];
                }
            }
            fputcsv($fp, $row);
        }
    }
*/
  

?>

### 通过命令行工具将 `.xlsx` 文件换为 `.csv` 格式 在 Linux 系统中,可以使用 `xlsx2csv` 工具将 Excel 文件换为 CSV 格式。该工具支持将整个 Excel 文件中的所有工作表导出为一个 CSV 文件,或者单独导出某个工作表。 以下是一些常见的命令示例: - 导出所有工作表到一个 CSV 文件中: ```bash xlsx2csv file.xlsx --all > all.csv ``` - 导出所有工作表并去除字段分隔符(例如逗号): ```bash xlsx2csv file.xlsx --all -p '' > all-no-delimiter.csv ``` - 仅导出第一个工作表: ```bash xlsx2csv file.xlsx -s 1 > sheet1.csv ``` 这些命令提供了灵活的选项,适用于不同场景下的数据导出需求[^1]。 ### 使用 Python 将 `.xlsx` 文件导出为 `.csv` 格式 在 Python 中,可以通过 `pandas` 和 `openpyxl` 库读取 `.xlsx` 文件,并将其导出为 `.csv` 格式。以下是一个示例代码: ```python import pandas as pd # 读取 Excel 文件 excel_file = 'your_file.xlsx' df = pd.read_excel(excel_file) # 导出为 CSV 文件 csv_file = 'output.csv' df.to_csv(csv_file, index=False) ``` 该代码将 Excel 文件中的第一个工作表导出为 CSV 文件。如果需要导出特定的工作表,可以使用 `sheet_name` 参数指定工作表名称或索引: ```python df = pd.read_excel(excel_file, sheet_name='Sheet1') df.to_csv('sheet1.csv', index=False) ``` 这种方法适用于需要自动化处理 Excel 文件的场景,同时具备良好的灵活性和可扩展性。 ### 在 C# 中实现 `.xlsx` 到 `.csv` 的导出 在 C# 中,可以通过 `SaveFileDialog` 提供用户交互界面,选择导出文件的格式。当数据量较大时,可以选择 `.csv` 格式以提高性能和兼容性。以下是一个示例代码片段: ```csharp private void btn_Export_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.FileName = DateTime.Now.ToString("yyyy-MM-ss"); sfd.Filter = "(*.xls)|*.xls|(*.xlsx)|*.xlsx|(*.csv)|*.csv"; sfd.FilterIndex = 1; // 默认选择 .xlsx 格式 if (dt.Rows.Count > 500000) sfd.FilterIndex = 3; // 数据量过大时,默认选择 .csv 格式 if (sfd.ShowDialog() == DialogResult.OK) { if (sfd.FileName.EndsWith(".csv")) SaveToCsv(dt, sfd.FileName); else WriteToExcel(dt, sfd.FileName, "Sheet1"); MessageBox.Show("Save OK"); } } ``` 此代码片段展示了如何根据数据量动态选择导出格式,并通过 `SaveToCsv` 和 `WriteToExcel` 方法分别处理 `.csv` 和 `.xlsx` 的导出操作[^2]。 ### 通过 Java 实现 `.xlsx` 文件的导出 在 Java 中,可以通过设置响应头实现 `.xlsx` 文件的导出,同时也可以将其换为 `.csv` 格式。以下是一个示例代码片段,展示如何通过 `HttpServletResponse` 导出 Excel 文件: ```java response.setHeader("Content-disposition", "attachment; filename*=utf-8'zh_cn'" + file + ".xlsx"); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); try { export.write(response.getOutputStream()); response.getOutputStream().flush(); } catch (IOException e) { e.printStackTrace(); } ``` 该代码通过设置响应头信息,实现浏览器端文件的下载功能。对于 `.csv` 格式导出,可以使用类似方式,但需调整内容类型和文件名扩展名[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值