简体   繁体   中英

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.

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 . Here you can create the formatted 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. 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.

  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. This is so because PHP and xls files have some compatibility issues in the past. Moreover, it is easier to read and manipulate data using PHP in comma separated values (csv) file than the Microsoft-owned proprietary format. One and is the perfect way to have this addressed is the conversion of xls to csv format.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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