日期:2014-05-20  浏览次数:20875 次

jxl想做一个通用的java文件,只需变化sql语句,导出的excel和sql语句查询结果像同
1.jxl想做一个通用的java文件,只需变化sql语句,导出的excel和sql语句查询结果像同
  请问大侠怎么搞,一直想,我也没有想出所以然来另外
2.为什么我的
Java code
sheet.setRowView(0,1000);
在导出的excel中第一行列高50不是1000

------解决方案--------------------
那就写一个程序执行输入的sql语句
然后把查询的结果输出到excel不久可以了?

你可以分几步写
1,先做一个执行sql的函数
2,做结果输出到excel的函数
3,1,2连接起来
------解决方案--------------------
这是我的一段代码,你可以写一个类,把查询结果组装成为数组,然后再有这个类来处理输出成文Excel。


import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;


public class ExcelImportButton{


private static final long serialVersionUID = 1L;
private String fileName;
private Object[][] dataObjects;
private String[] titles;
public ExcelImportButton() {
addActionListener(this);
this.setText("导出Excel表格");
}
public String getContentType() {
return "xls";
}
public String getFileName() {
if (fileName == null) {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
return format.format(new Date()) + ".xls";
} else
return fileName;
}

public int getSize() {
return 0;
}



/**
* 第二根据数据量分sheet
* cell.setCellValue(new HSSFRichTextString("我是单元格!")); 取代cell.setCellValue("");
*/
public void writeFile(OutputStream out) {
try{HSSFWorkbook workbook = new HSSFWorkbook();
if(titles==null||titles.length==0){
throw new NullPointerException("Excel-titles为空");
}
if(dataObjects==null||dataObjects.length==0){
throw new NullPointerException("Excel-dataObjects为空");
}
//将dataObjects封装到小的dataObject中,以number为单位,再分别装到每个sheet
int number = 500;//每个sheet最多500条数据
ArrayList<Object[][]> aloss = new ArrayList<Object[][]>();
for(int q=0; q<dataObjects.length; q=q+number){
ArrayList<Object[]> v =new ArrayList<Object[]>();
for(int w=q;w<q+number;w++){
if(w >= dataObjects.length)
break;
v.add(dataObjects[w]);
}
if(v.size()>0){
Object temp [][]= new Object[v.size()][];
v.toArray(temp);
aloss.add(temp);
}
}


for(int e=0;e<aloss.size();e++){
Object[][] dataObject = aloss.get(e);
HSSFSheet sheet = workbook.createSheet();//上面那个定义sheet名称的,条码打印机不识数据。
HSSFRow row = sheet.createRow(0);
for (int i = 0; i < titles.length; i++) {
HSSFCell cell = row.createCell((short) i);
cell.setCellValue(new HSSFRichTextString(titles[i]));
}
if (dataObject != null) {
for (int i = 0; i < dataObject.length; i++) {
row = sheet.createRow(i + 1);
Object[] line = dataObject[i];
if (line == null || line.length == 0) {
continue;
}
for (int k = 0; k < line.length; k++) {
HSSFCell cell = row.createCell((short) k);
cell.setCellValue(new HSSFRichTextString(line[k] == null ? "暂未录入" : line[k]
.toString()));
}
}
}}
workbook.write(out);
out.flush();
}catch(Exception e){
e.printStackTrace();
}
}