我需要根据.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");
答案 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格式。