简体   繁体   English

使用csv导出xls

[英]exporting xls using csv

I need to export a .xls file based on a .csv file i am able to export the same but the file once opened in excel format does not show proper result. 我需要基于.csv文件导出.xls文件,但我能够将其导出,但是以excel格式打开的文件无法显示正确的结果。

This is what i have done : 这就是我所做的:

$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");

you can create the Excel using the library PHPExcel . 您可以使用PHPExcel库创建Excel。 Here you can create the formatted XLS. 在这里您可以创建格式化的XLS。

Why don't you just do something like this: 你为什么不做这样的事情:

<?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";

?>

I have java program to do this. 我有Java程序可以做到这一点。 See the code and try it.This is worked for me.In this we need to give csv file as input and we generate the excel file based on csv file.For this we need one jar file jxl.jar. 查看代码并尝试一下。这对我有用。在此我们需要将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 ");
}

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

} }

Read it Reading data from an MS Excel file using PHP is sometimes a pain for most developers. 读取它对于大多数开发人员来说,有时使用PHP从MS Excel文件中读取数据是很痛苦的。 This is so because PHP and xls files have some compatibility issues in the past. 之所以如此,是因为PHP和xls文件在过去存在一些兼容性问题。 Moreover, it is easier to read and manipulate data using PHP in comma separated values (csv) file than the Microsoft-owned proprietary format. 此外,与Microsoft拥有的专有格式相比,使用PHP以逗号分隔值(csv)文件读取和操作数据更容易。 One and is the perfect way to have this addressed is the conversion of xls to csv format. 一种解决此问题的完美方法是将xls转换为csv格式。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM