使用csv导出xls

时间:2012-10-09 07:19:09

标签: php csv xls

我需要根据.csv文件导出.xls文件我能够导出相同的文件但是以excel格式打开的文件没有显示正确的结果。

这就是我所做的:

$filename = 'file';
$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'), // this should be the heading
    array('123', '456', '789'),
    array('"aaa"', '"bbb"')
);

$fp = fopen('file.csv', 'w');

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);
header("Pragma: public");
header("Content-Type: application/download");
header("Content-Disposition: attachment;filename=".$filename.".xls");
header("Content-Transfer-Encoding: binary ");
echo file_get_contents($filename.".csv");

4 个答案:

答案 0 :(得分:1)

您可以使用库PHPExcel创建Excel。在这里,您可以创建格式化的XLS。

答案 1 :(得分:0)

为什么不做这样的事情:

<?php

$filename = 'file';

header('Content-type: application/msexcel');
header('Pragma: public');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Disposition: attachment;filename=".$filename.".xls");

$header = 'aaa'."\t".'bbb'."\t".'ccc'."\t".'dddd';
$data   = '123'."\t".'456'."\t".'789'."\n";

$data = $header."\n".$data;

$data = trim($data)."\n";
$data = str_replace("\r", "", $data);

echo $data."\n";

?>

答案 2 :(得分:0)

我有java程序来做这件事。看看代码并试一试。这对我有用。在这里我们需要提供csv文件作为输入,我们生成基于csv文件的excel文件。为此,我们需要一个jar文件jxl.jar。

  package com.sample.java.testing;

 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
 import java.util.Locale;
 import jxl.CellView;
 import jxl.Workbook;
 import jxl.WorkbookSettings;
 import jxl.format.UnderlineStyle;
 import jxl.write.Label;
 import jxl.write.Number;
 import jxl.write.WritableCellFormat;
 import jxl.write.WritableFont;
 import jxl.write.WritableSheet;
 import jxl.write.WritableWorkbook;
 import jxl.write.WriteException;
 import jxl.write.biff.RowsExceededException;

    public class CSVToExcelSample {

private WritableCellFormat timesBoldUnderline;
private WritableCellFormat times;
private String inputFile;

//=========================================================================

public void setOutputFile(String inputFile) {
    this.inputFile = inputFile;
}

//=========================================================================

public void write() throws IOException, WriteException {
    File file = new File(inputFile);
    WorkbookSettings wbSettings = new WorkbookSettings();
    wbSettings.setLocale(new Locale("en", "EN"));
    WritableWorkbook workbook = Workbook.createWorkbook(file, wbSettings);
    workbook.createSheet("Report", 0);
    workbook.createSheet("Report1", 1);
    WritableSheet excelSheet = workbook.getSheet(0);
    WritableSheet excelSheet1 = workbook.getSheet(1);
    createLabel(excelSheet);
    createContent(excelSheet);
    createLabel(excelSheet1);
    createContent(excelSheet1);
    workbook.write();
    workbook.close();
}

//=========================================================================

private void createLabel(WritableSheet sheet) throws WriteException {
    // Lets create a times font
    WritableFont times10pt = new WritableFont(WritableFont.TIMES, 10);
    // Define the cell format
    times = new WritableCellFormat(times10pt);
    // Lets automatically wrap the cells
    times.setWrap(true);
    // Create create a bold font with unterlines
    WritableFont times10ptBoldUnderline = new WritableFont(
            WritableFont.TIMES, 10, WritableFont.BOLD, false,
            UnderlineStyle.SINGLE);
    timesBoldUnderline = new WritableCellFormat(times10ptBoldUnderline);
    // Lets automatically wrap the cells
    timesBoldUnderline.setWrap(true);

    CellView cv = new CellView();
    cv.setFormat(times);
    cv.setFormat(timesBoldUnderline);
    cv.setAutosize(true);

    // Write a few headers
    addCaption(sheet, 0, 0, "Header 1");
    addCaption(sheet, 1, 0, "This is another header");

}

//=========================================================================

private void createContent(WritableSheet sheet) throws WriteException,
        RowsExceededException, IOException {
    // Write a few number
    /*
     * for (int i = 1; i < 10; i++) { // First column addNumber(sheet, 0, i,
     * i + 10); // Second column addNumber(sheet, 1, i, i * i); }
     * InputStream inputStream = new FileInputStream(file);
     * BufferedReader CSVFile = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
     */
    File file = new File("C:/code/csv/depression_scale.csv");
    BufferedReader CSVFile = new BufferedReader(new FileReader(file));
    int i = 1;
    // int j = 0;
    // int k = 0;
    String dataRow = CSVFile.readLine(); // Read the first line of data.
    // The while checks to see if the data is null. If it is, we've hit
    // the end of the file. If not, process the data.
    while (dataRow != null) {
        String[] dataArray = dataRow.split(",");
        int j = 0;
        for (String item : dataArray) {
            System.out.print(item);
            addLabel(sheet, j, i, item);
            // i++;
            j++;
        }
        i++;
        // k++;
        System.out.println(); // Print the data line.
        dataRow = CSVFile.readLine(); // Read next line of data.
    }

    // Close the file once all data has been read.
    CSVFile.close();
    // Lets calculate the sum of it
    /*
     * StringBuffer buf = new StringBuffer(); buf.append("SUM(A2:A10)");
     * Formula f = new Formula(0, 10, buf.toString()); sheet.addCell(f); buf
     * = new StringBuffer(); buf.append("SUM(B2:B10)"); f = new Formula(1,
     * 10, buf.toString()); sheet.addCell(f);
     * 
     * // Now a bit of text for (int i = 12; i < 20; i++) { // First column
     * addLabel(sheet, 0, i, "Boring text " + i); // Second column
     * addLabel(sheet, 1, i, "Another text"); }
     */
}

//=========================================================================

private void addCaption(WritableSheet sheet, int column, int row, String s)
        throws RowsExceededException, WriteException {
    Label label;
    label = new Label(column, row, s, timesBoldUnderline);
    sheet.addCell(label);
}

//=========================================================================

@SuppressWarnings("unused")
private void addNumber(WritableSheet sheet, int column, int row,
        double integer) throws WriteException, RowsExceededException {
    Number number;
    number = new Number(column, row, integer, times);
    sheet.addCell(number);
}

//=========================================================================

private void addLabel(WritableSheet sheet, int column, int row, String s)
        throws WriteException, RowsExceededException {
    Label label;
    label = new Label(column, row, s, times);
    sheet.addCell(label);
}

//=========================================================================

public static void main(String[] args) throws WriteException, IOException {


    CSVToExcelSample test = new CSVToExcelSample();
    test.setOutputFile("filepathhere like C:/code/excel/lars.xls");
    test.write();
    System.out.println("Please check the result file under C:/code/excel/lars.xls ");
}

//=========================================================================

}

答案 3 :(得分:0)

Read it 使用PHP从MS Excel文件读取数据有时是大多数开发人员的痛苦。这是因为PHP和xls文件过去存在一些兼容性问题。此外,使用逗号分隔值(csv)文件中的PHP比使用Microsoft拥有的专有格式更容易读取和操作数据。一个并且是解决这个问题的完美方法是将xls转换为csv格式。