java生成表格
㈠ 用java將數據導出到wps表格中,怎麼實現
一:頁面圖片顯示預覽:
1)如下圖:
二:代碼演示:
說明:執行操作時,請先引進導出excel表格的jar文件包。
找到導出按鈕所執行的js方法,在java後天查看該方法的實現即可。
1)jsp代碼:
[html]view plainprint?
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<%@taglibprefix="s"uri="/struts-tags"%>
<%
Stringpath=request.getContextPath();
StringbasePath=request.getScheme()+"://"
+request.getServerName()+":"+request.getServerPort()
+path+"/";
%>
<html>
<head>
<basehref="<%=basePath%>">
<title>駕校合格率排名</title>
<linkhref="jsp/commonstyle/css/tabStyle.css"rel="stylesheet"type="text/css">
<linkrel="STYLESHEET"type="text/css"href="<%=basePath%>jsp/hgltj/js/tablesort.css">
<scripttype="text/javascript"src="<%=basePath%>jsp/system/common/js/publicColor.js"></script>
<scripttype="text/javascript"src="jsp/commonstyle/js/js/My97DatePicker/WdatePicker.js"defer="defer"></script>
<scripttype="text/javascript"src="<%=basePath%>jsp/hgltj/js/tablesort.js"></script>
<scriptlanguage="JavaScript">
functionload()
{
//根據解析度設置表格大小
maxw=document.getElementById("maintb").offsetWidth;
if(maxw<824){//1024解析度未展開
mainbox.width="98%";
}elseif(maxw<1013){//1024解析度展開
mainbox.width="98%";
}elseif(maxw<1081){//1280解析度未展開
mainbox.width="95%";
}elseif(maxw<1270){//1280分辨未展開
mainbox.width="95%";
}else{//1280以上分辨展開
mainbox.width="98%";
}
}
</script>
<script>
functionoverIt(){
varthe_obj=event.srcElement;
if(the_obj.tagName.toLowerCase()=="td"){
the_obj=the_obj.parentElement;
the_obj.oBgc=the_obj.currentStyle.backgroundColor;
the_obj.oFc=the_obj.currentStyle.color;
the_obj.style.backgroundColor='#4073C4';
the_obj.style.color='#ffffff';
the_obj.style.textDecoration='underline';
}
}
functionoutIt(){
varthe_obj=event.srcElement;
if(the_obj.tagName.toLowerCase()=="td"){
the_obj=the_obj.parentElement;
the_obj.style.backgroundColor=the_obj.oBgc;
the_obj.style.color=the_obj.oFc;
the_obj.style.textDecoration='';
}
}
functionserch(){
document.getElementById("formName").action="<%=basePath%>hgltj.action?method=getHglpm";
document.getElementById("formName").submit();
}
functiontbbt(){
varjzrq=document.getElementById("jzrqId").value;
//varjxmc=document.getElementById("jxmcId").value;
window.open('<%=basePath%>hgltj.action?method=getHglpmTb&tjjxkshgl.jzrq='+jzrq+'&tjjxkshgl.zt='+1,'','height=650,width=1250,top=150,left=200,toobar=no,menubar=no,scrollbars=yes,resizable=no,location=no,');
}
functionopenwd(){
document.getElementById("formName").action="<%=basePath%>hgltj.action?method=downJxhglPm";
document.getElementById("formName").submit();
}
</script>
</head>
<BODYonLoad="load()"style="background:url(images/cont_bg.gif);background-repeat:repeat-y">
<inputtype="hidden"name="method"value="getDriverInfoList"/>
<tableborder="0"width="100%"cellspacing="0"cellpadding="0"id="maintb">
<tr>
<tdalign="center">
<tablewidth="90%"border="0"cellspacing="0"cellpadding="0"id="mainbox"style="background:url(jsp/commonstyle/images/usermessage_02.gif);background-repeat:repeat-x;">
<!--寬度可變內容框-->
<tr>
<tdwidth="33"height="27"style="background:url(jsp/commonstyle/images/usermessage_01.gif);background-position:left;background-repeat:no-repeat;"></td>
<tdwidth="965"class="style1"><fontcolor="black">駕校合格率排名</font></td>
<tdwidth="14"height="27"style="background:url(jsp/commonstyle/images/usermessage_03.gif);background-position:right;background-repeat:no-repeat;"></td>
</tr>
<tr>
<tdcolspan="3">
<!--頁面主體內容開始-->
<!--查詢條件-->
<formaction=""name="formName"method="post"style="margin:0px"id="formName"theme="simple">
<tablewidth="100%"border="0"cellpadding="0"cellspacing="0"style="border-collapse:collapse;"id="tj"align="center">
<tralign="left">
<tdclass="tjbg1"style="text-align:left">
<!--<inputtype="hidden"id="method"name="method"value="getHglpm"/>-->
統計日期:
<inputtype="text"name="tjjxkshgl.jzrq"id="jzrqId"value="<s:propertyvalue="tjjxkshgl.jzrq"/>"onclick="WdatePicker({skin:'whyGreen',dateFmt:'yyyy-MM'})"/>
<!--駕校名稱:
<s:selectid="jxmcId"name="tjjxkshgl.jxxh"value="tjjxkshgl.jxxh"list="schoolList"listKey="jxxh"listValue="jxmc"headerKey=""headerValue="--請選擇--"theme="simple"></s:select>-->
<inputname="input"value="統計"type="button"class="normalbtn"onClick="serch()"style="margin-bottom:5px"/>
<inputname="input"type="button"value="合格率圖表"onclick="tbbt()"class="normalbtn"style="margin-bottom:5px"/>
<inputid="Button1"type="button"value="導出"onclick="openwd();"class="normalbtn"style="margin-bottom:5px"/>
</td>
</tr>
</table><!--查詢結果-->
</form>
<!--查詢結果-->
<tablewidth="100%"border="0"cellpadding="4"cellspacing="1"bgcolor="#abcfff"id="cxjg"align="center">
<thead>
<trclass="tbtitle">
<tdwidth="4%"align="center"class="t1">名次</td>
<tdwidth="8%"align="center"class="t1">名稱</td>
<tdclass="t1"width="5%"align="center">科目一</td>
<tdclass="t1"width="5%"align="center">科目二</td>
<tdclass="t1"width="5%"align="center">科目三</td>
<tdclass="t1"width="5%"align="center">平均合格率</td>
<tdclass="t1"width="5%"align="center">操作</td>
</tr>
</thead>
<s:iteratorid="jxhgl"value="jxhelpmList"status="st">
<trclass="changeColor"onMouseOver="overIt()"onMouseOut="outIt()"style="cursor:hand"align="center">
<td><s:propertyvalue="#st.index+1"/></td>
<td><s:propertyvalue="#jxhgl.jxmc"/></td>
<td><s:propertyvalue="#jxhgl.km1hgl"/></td>
<td><s:propertyvalue="#jxhgl.km2hgl"/></td>
<td><s:propertyvalue="#jxhgl.km3hgl"/></td>
<td><s:propertyvalue="#jxhgl.avghgl"/>%</td>
<td>
<ahref="javascript:"onclick="openWin('<%=basePath%>hgltj.action?method=getTbForJxxh&tjjxkshgl.jxxh=<s:propertyvalue="#jxhgl.jxxh"/>&tjjxkshgl.zt=1','',1250,750);">圖表</a>
</td>
</tr>
</s:iterator>
</table>
</table>
</td>
</tr>
</table>
</body>
</html>
2)java代碼演示:
[java]view plainprint?
/**
*駕校合格率導出excel圖表
*/
//response.getOutputStream();//取得輸出流
response.reset();//清空輸出流
Stringtmptitle="駕校合格率排名";//標題
response.setHeader("Content-disposition","attachment;filename="+newString(tmptitle.getBytes(),"iso8859-1")+".xls");//設定輸出文件頭
response.setContentType("application/vnd.ms-excel");//定義輸出類型
wbook=Workbook.createWorkbook(os);//建立excel文件
WritableSheetwsheet=wbook.createSheet(tmptitle,0);//sheet名稱
//設置excel標題
//cellFormat.setBackground(Colour.AQUA);
cellFormat.setFont(wfont);
label.setCellFormat(cellFormat);
wsheet.addCell(label);
//wsheet.addCell(newLabel(0,0,tmptitle,wcfFC));
wsheet.setRowView(0,500);//第一行高度
wsheet.mergeCells(0,0,6,1);//合並單元格(第一列的第一行和第七列的第二行合並)
//wsheet.mergeCells(0,1,9,1);
//wsheet.mergeCells(0,2,0,4);
//wsheet.mergeCells(1,2,3,2);
//wsheet.mergeCells(4,2,6,2);
//wsheet.mergeCells(7,2,9,2);
wsheet.setColumnView(0,10);//寬度
wsheet.setColumnView(1,25);//寬度
wsheet.setColumnView(2,10);//寬度
wsheet.setColumnView(3,10);//寬度
wsheet.setColumnView(4,10);//寬度
wsheet.setColumnView(5,10);//寬度
//開始生成主體內容
wfont=newjxl.write.WritableFont(WritableFont.ARIAL,14,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.BLACK);
wcfFC=newWritableCellFormat(wfont);
wsheet.addCell(newLabel(0,2,"名次",wcfFC));
wsheet.addCell(newLabel(1,2,"駕校名稱",wcfFC));
wsheet.addCell(newLabel(2,2,"科目一",wcfFC));
wsheet.addCell(newLabel(3,2,"科目二",wcfFC));
wsheet.addCell(newLabel(4,2,"科目三",wcfFC));
wsheet.addCell(newLabel(5,2,"合格率",wcfFC));
intcount=jxhelpmList.size();
if(count>0){////判斷集合是否不為0
TjJxkshgltjhgl=null;
for(inti=0;i<jxhelpmList.size();i++){
tjhgl=(TjJxkshgl)jxhelpmList.get(i);
wsheet.addCell(newLabel(0,i+3,(i+1)+""));
wsheet.addCell(newLabel(1,i+3,tjhgl.getJxmc()));
wsheet.addCell(newLabel(2,i+3,tjhgl.getKm1hgl()));
wsheet.addCell(newLabel(3,i+3,tjhgl.getKm2hgl()));
wsheet.addCell(newLabel(4,i+3,tjhgl.getKm3hgl()));
wsheet.addCell(newLabel(5,i+3,tjhgl.getAvghgl()));
}
㈡ java 生成PDF表格
實現代碼如下:
package com.qhdstar.java.pdf;
import java.awt.Color;
import java.io.FileOutputStream;
import com.lowagie.text.Chapter;
import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Section;
import com.lowagie.text.pdf.PdfWriter;
/**
* 描述:TODO 【JAVA生成PDF】
*
*
* @title GeneratePDF
* @version V1.0
*/
public class GeneratePDF {
public static void main(String[] args) {
//調用第一個方法,向C盤生成一個名字為ITextTest.pdf 的文件
try {
writeSimplePdf();
}
catch (Exception e) { e.printStackTrace(); }
//調用第二個方法,向C盤名字為ITextTest.pdf的文件,添加章節。
try {
writeCharpter();
}
catch (Exception e) { e.printStackTrace(); }
}
public static void writeSimplePdf() throws Exception {
// 1.新建document對象
// 第一個參數是頁面大小。接下來的參數分別是左、右、上和下頁邊距。
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
// 2.建罩塌立一個書寫器(Writer)與document對象關聯,通過書寫器(Writer)可以將文檔寫入到磁碟中。
// 創建 PdfWriter 對象 第一個參數是對文檔對象的引用,第二個參數是文件的實際名稱,在該物好圓名稱中還會給出其輸出路徑。
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\ITextTest.pdf"));
// 3.打開文檔
document.open();
// 4.向文檔中添加內容
// 通過 com.lowagie.text.Paragraph 來添加文本。可以用文本及其默認的字體、顏色、大小等等設置來創建一個默認段落
document.add(new Paragraph("First page of the document."));
document.add(new Paragraph("Some more text on the first page with different color and font type.", FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD, new Color(255, 150, 200))));
// 5.關閉文檔
document.close();
}
/**
* 添襪迅加含有章節的pdf文件
*
* @throws Exception
*/
public static void writeCharpter() throws Exception {
// 新建document對象 第一個參數是頁面大小。接下來的參數分別是左、右、上和下頁邊距。
Document document = new Document(PageSize.A4, 20, 20, 20, 20);
// 建立一個書寫器(Writer)與document對象關聯,通過書寫器(Writer)可以將文檔寫入到磁碟中。
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("c:\\ITextTest.pdf"));
// 打開文件
document.open();
// 標題
document.addTitle("Hello mingri example");
// 作者
document.addAuthor("wolf");
// 主題
document.addSubject("This example explains how to add metadata.");
document.addKeywords("iText, Hello mingri");
document.addCreator("My program using iText");
// document.newPage();
// 向文檔中添加內容
document.add(new Paragraph("\n"));
document.add(new Paragraph("\n"));
document.add(new Paragraph("\n"));
document.add(new Paragraph("\n"));
document.add(new Paragraph("\n"));
document.add(new Paragraph("First page of the document."));
document.add(new Paragraph("First page of the document."));
document.add(new Paragraph("First page of the document."));
document.add(new Paragraph("First page of the document."));
document.add(new Paragraph("Some more text on the first page with different color and font type.", FontFactory.getFont(FontFactory.defaultEncoding, 10, Font.BOLD, new Color(0, 0, 0))));
Paragraph title1 = new Paragraph("Chapter 1", FontFactory.getFont(FontFactory.HELVETICA, 18, Font.BOLDITALIC, new Color(0, 0, 255)));
// 新建章節
Chapter chapter1 = new Chapter(title1, 1);
chapter1.setNumberDepth(0);
Paragraph title11 = new Paragraph("This is Section 1 in Chapter 1", FontFactory.getFont(FontFactory.HELVETICA, 16, Font.BOLD, new Color(255, 0, 0)));
Section section1 = chapter1.addSection(title11);
Paragraph someSectionText = new Paragraph("This text comes as part of section 1 of chapter 1.");
section1.add(someSectionText);
someSectionText = new Paragraph("Following is a 3 X 2 table.");
section1.add(someSectionText);
document.add(chapter1);
// 關閉文檔
document.close();
}
}
㈢ 如何用JAVA動態生成一個表格
從資料庫讀出數據
然後用JSP頁面顯示出來
形扒芹成一個表格
------解決方案--------------------
後台數據放在List,傳到前台。
前告此此台用jtsl的foreach
或者struts2的iterator遍襪迅歷出來,也可以採用java的代碼<%%>。
㈣ java怎麼導出excel表格
可以使用POI開源的api:
1.首先下載poi-3.6-20091214.jar,下載地址如下:
http://download.csdn.net/detail/evangel_z/3895051
2.Student.java
import java.util.Date;
public class Student
{
private int id;
private String name;
private int age;
private Date birth;
public Student()
{
}
public Student(int id, String name, int age, Date birth)
{
this.id = id;
this.name = name;
this.age = age;
this.birth = birth;
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public Date getBirth()
{
return birth;
}
public void setBirth(Date birth)
{
this.birth = birth;
}
}
3.CreateSimpleExcelToDisk.java
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class CreateSimpleExcelToDisk
{
/**
* @功能:手工構建一個簡單格式的Excel
*/
private static List<Student> getStudent() throws Exception
{
List list = new ArrayList();
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
Student user1 = new Student(1, "張三", 16, df.parse("1997-03-12"));
Student user2 = new Student(2, "李四", 17, df.parse("1996-08-12"));
Student user3 = new Student(3, "王五", 26, df.parse("1985-11-12"));
list.add(user1);
list.add(user2);
list.add(user3);
return list;
}
public static void main(String[] args) throws Exception
{
// 第一步,創建一個webbook,對應一個Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 第二步,在webbook中添加一個sheet,對應Excel文件中的sheet
HSSFSheet sheet = wb.createSheet("學生表一");
// 第三步,在sheet中添加表頭第0行,注意老版本poi對Excel的行數列數有限制short
HSSFRow row = sheet.createRow((int) 0);
// 第四步,創建單元格,並設置值表頭 設置表頭居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 創建一個居中格式
HSSFCell cell = row.createCell((short) 0);
cell.setCellValue("學號");
cell.setCellStyle(style);
cell = row.createCell((short) 1);
cell.setCellValue("姓名");
cell.setCellStyle(style);
cell = row.createCell((short) 2);
cell.setCellValue("年齡");
cell.setCellStyle(style);
cell = row.createCell((short) 3);
cell.setCellValue("生日");
cell.setCellStyle(style);
// 第五步,寫入實體數據 實際應用中這些數據從資料庫得到,
List list = CreateSimpleExcelToDisk.getStudent();
for (int i = 0; i < list.size(); i++)
{
row = sheet.createRow((int) i + 1);
Student stu = (Student) list.get(i);
// 第四步,創建單元格,並設置值
row.createCell((short) 0).setCellValue((double) stu.getId());
row.createCell((short) 1).setCellValue(stu.getName());
row.createCell((short) 2).setCellValue((double) stu.getAge());
cell = row.createCell((short) 3);
cell.setCellValue(new SimpleDateFormat("yyyy-mm-dd").format(stu
.getBirth()));
}
// 第六步,將文件存到指定位置
try
{
FileOutputStream fout = new FileOutputStream("E:/students.xls");
wb.write(fout);
fout.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
㈤ 如何用java製作一個類似excel的電子表格
xls,poi都是java的對應excel的開源中高談項目。念漏google搜一下,然後下載jar。不是太復雜的excel,很容易就可以製作了賣碰。
㈥ java導出excel不固定表頭
Java導出Excel不固定表頭的方法如下:1. 先生成Excel的列標題,不需要指定具體的寬度,這里可以使用數組等結構保存表頭信息;2. 然後,生成Excel的正文部分,不需要考慮表頭;3. 最後,使用合並單元格的方式將表頭和正文部分拼接起來形成完整的Excel表格。在這個過程中,需要注意以下幾點:1. 合並表頭單元格的行敏知型和列數需要根據表頭內容的數量和長度動態計算出來;2. 導出的文件橋猜可猛慧以使用POI等工具進行操作;3. 導出Excel時,可以設置一些樣式和格式,比如字體、顏色、邊框等等,讓導出的表格更加美觀。
㈦ 如何用java應用程序創建表格
多少有點麻煩
建意不要用java來實現
JTable 組件:
類層次結構圖:
java.lang.Object
--java.awt.Component
--java.awt.Container
--javax.swing.JComponent
--javax.swing.JTabel
在使用 JTable 以前,我們先看一下它的構造函數有哪些, 以及應該如何使用:
JTabel 構造函數:
JTable():建立一個新的 JTables,並使用系統默認的 Model.
JTable(int numRows,int numColumns):建立一個具有 numRows 行,numColumns 列的空表格,
使用的是 DefaultTableModel.
JTable(Object[ ][ ] rowData,Object[ ][ ] columnNames):建立一個顯示二維數組數據的表格,且可
以顯示列的名稱。
JTable(TableModeldm):建立一個 JTable,有默認的欄位模式以及選擇模式,並設置數據模式。
JTable(TableModeldm,TableColumnModel cm):建立一個 JTable,設置數據模式與欄位模式,並
有默認的選擇模式。
JTable(TableModel dm,TableColumnModel cm,ListSelectionModel sm):建立一個 JTable,設置數
據模式、欄位模式、與選擇模式。
JTable(Vector rowData,Vector columnNames):建立一個以 Vector 為輸入來源的數據表格,可顯
示行的名稱。
我們先以 Array 構造方式,說明如何利用 JTable 來建立一個簡單的表格:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class SimpleTable{
public SimpleTable(){
JFrame f=new JFrame();
Object[ ][ ] playerInfo={
{" 阿 呆 ",new Integer(66),new Integer(32),new Integer(98),new
Boolean(false)},
{"阿獃",new Integer(82),new Integer(69),new Integer(128),new
Boolean(true)},
};
String[ ] Names={"姓名","語文","數學","總分","及格"};
JTable table=new JTable(playerInfo,Names);
table.(new Dimension(550,30));
JScrollPane scrollPane=new JScrollPane(table);
f.getContentPane().add(scrollPane,BorderLayout.CENTER);
f.setTitle("SimpleTable");
f.pack();
f.show();
f.addWindowListener(newWindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args){
SimpleTable b=new SimpleTable();
}
}
表格由兩部份組成:分別是行標題(Column Header)與行對象(Column Object).利用 JTable
所提供的 getTableHeader()方法取得行標題。在這個例子中,我們將 JTable 放在 JScrollPane
中,這種做法可以將 Column Header 與 Colmn Object 完整的顯示出來,因為 JScrollPane 會自
動 取 得 Column Header. 但 如 果 文 壇 讀 者 將 上 面 第 15 行 去 掉 並 修 改 第 16 行 :
f.getContentPane().add(table,BorderLayout.CENTER);
則運行結果你會發現 Column Header 不見了。
如果你不想用 JScrollPane,要解決這個問題,你必須將程序修改如下:
JTable table=new JTable(p,n);
table.(new Dimension(550,30));
f.getContentPane().add(table.getTableHeader(),BorderLayout.NORTH);
f.getContentPane().add(table,BorderLayout.CENTER);
運行結果就會跟之前一樣有行標題了.
上面的運行結果就會跟發現,每個欄位的寬度都是一樣的,除非你自行拉曳某個列寬。若
我們想一開始就設置列寬的值,可以利
用 TableColumn 類所提供的 setPreferredWidth()方法來設置,並可利用 JTable 類所提供的
setAutoResizeMode()方法來設置調整某個
列寬時其他列寬的變化情況,我們看下面這個例子:
import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class SimpleTable2{
public SimpleTable2(){
JFrame f=new JFrame();
Object[][] p={
{" 阿 呆 ",new Integer(66),new Integer(32),new Integer(98),new
Boolean(false),new Boolean(false)},
{" 阿 呆 ",new Integer(82),new Integer(69),new Integer(128),new
Boolean(true),new Boolean(false)},
};
String[] n={"姓名","語文","數學","總分","及格","作弊"};
TableColumn column=null;
JTable table=new JTable(p,n);
table.(new Dimension(550,30));
table.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
for (int i=0;i<6;i++){
//利用 JTable 中的 getColumnModel()方法取得 TableColumnModel 對象;再利用
TableColumnModel 界面所定義的 getColumn()方法取
//TableColumn 對象,利用此對象的 setPreferredWidth()方法就可以控制欄位的寬度.
column=table.getColumnModel().getColumn(i);
if ((i%2)==0)
column.setPreferredWidth(150);
else
column.setPreferredWidth(50);
}
JScrollPane scrollPane=new JScrollPane(table);
f.getContentPane().add(scrollPane,BorderLayout.CENTER);
f.setTitle("SimpleTable");
f.pack();
f.show();
f.setVisible(true);
f.addWindowListener(newWindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args){
new SimpleTable2();
}
}
列可調整的 5 個參數:
AUTO_RESIZE_SUBSEQUENT_COLUMENS:當調整某一列寬時,此欄位之後的所有欄位列
寬都會跟著一起變動。此為系統默認值。
AUTO_RESIZE_ALL_COLUMNS:當調整某一列寬時,此表格上所有欄位的列寬都會跟著一
起變動。
AUTO_RESIZE_OFF:當調整某一列寬時,此表格上所有欄位列寬都不會跟著改變。
AUTO_RESIZE_NEXT_COLUMN:當調整某一列寬時,此欄位的下一個欄位的列寬會跟著改
變,其餘均不會變。
AUTO_RESIZE_LAST_COLUMN:當調整某一列寬時,最後一個欄位的列寬會跟著改變,其
余均不會改變。
由以上範例可知,利用 Swing 來構造一個表格其實很簡單的,只要你利用 Vector 或 Array
來作為我們表格的數據輸入,將 Vector 或 Array 的
內容填入 JTable 中,一個基本的表格就產生了。不過,雖然利用 JTable(Object[][]
rowData,Object[][] columnNames)以及
JTable(Vector rowData,Vector columnNames)構造函數來構造構造 JTable 很方便,但卻有些缺
點。例如上例中,我們表格中的每個欄位
(cell)一開始都是默認為可修改的,用戶因此可能修改到我們的數據;其次,表格中每個單元
(cell)中的數據類型將會被視為同一種。在我
們的例子中,數據類型皆被顯示為 String 的類型,因此,原來的數據類型聲明為 Boolean 的
數據會以 String 的形式出現而不是以檢查框(
Check Box)出現。
除此之外,如果我們所要顯示的數據是不固定的,或是隨情況而變,例如同樣是一份成績
單,老師與學生所看到的表格就不會一樣,顯
示的外觀或操作模式也許也不相同。為了因應這些種種復雜情況,上面簡單的構造方式已不
宜使用,Swing 提供各種 Model(如:
TableModel、TableColumnModel 與 ListSelectionModel)來解決上述的不便,以增加我們設計
表格的彈性。我們下面就先對 TableModel 來
做介紹:
TableModel
TableModel類本身是一個interface,在這個interface裡面定義了若乾的方法:包括了存取表
格欄位(cell)的內容、計算表格的列數等等的基本存取操作,讓設計者可以簡單地利用
TableModel 來實作他所想要的表格。TableModel 界面是放在 javax.swing.table package 中,
這個 package 定義了許多 JTable 會用到的各種 Model,讀者可利用 java api 文件找到這個
package,並由此 package 找到各類或界面所定義的方法。
TableModel 方法:
void addTableModelListener(TableModelListener l):使表格具有處理 TableModelEvent 的能
力。當表格的 Table Model 有所變化時,會發出 TableModel Event 事件信息.
Class getColumnClass(int columnIndex):返回欄位數據類型的類名稱.
int getColumnCount():返回欄位(行)數量.
String getColumnName(int columnIndex):返回欄位名稱.
int getRowCount():返回數據列數量.
Object getValueAt(int rowIndex,int columnIndex):返回數據某個 cell 中的值.
boolean isCellEditable(int rowIndex,int columnIndex):返回cell是否可編輯,true的話
為可編輯.
void removeTableModelListener(TableModelListener l):從 TableModelListener 中
移除一個 listener.
void setValueAt(Object aValue,int rowIndex,int columnIndex): 設 置 某 個
cell(rowIndex,columnIndex)的值;
由於TableModel本身是一個Interface,因此若要直接實現此界面來建立表格並不是件輕松
的事.幸好 java 提供了兩個類分別實現了這個界面,一個是 AbstractTableModel 抽象類,一個是
DefaultTableModel 實體類.前者實現了大部份的 TableModel 方法,讓用戶可以很有彈性地構
造自己的表格模式;後者繼承前者類,是 java 默認的表格模式.這三者的關系如下所示:
TableModel---implements--->AbstractTableModel-----extends--->DefaultTableModel
AbstractTableModel:
java 提供的 AbstractTableModel 是一個抽象類,這個類幫我們實現大部份的 TableModel 方
法,除了 getRowCount(),getColumnCount(),getValueAt()這三個方法外.因此我們的主要任務就
是去實現這三個方法.利用這個抽象類就可以設計出不同格式的表格.我們來看看它所
提供的方法:
AbstractTableModel 方法:
void addTableModelListener(TableModelListener l):使表格具有處理 TableModelEvent 的能
力.當表格的 Table Model 有所變化時,會發出 TableModelEvent 事件信息.
int findColumn(String columnName):尋找在行名稱中是否含有 columnName 這個項目.若
有,則返回其所在行的位置;反之則返回-1 表示
void fireTableCellUpdated(int row, int column):通知所有的 Listener 在這個表格中的
(row,column)欄位的內容已經改變了.
void fireTableChanged(TableModelEvent e):將所收的事件通知傳送給所有在這個 table
model 中注冊過的 TableModelListeners.
void fireTableDataChanged():通知所有的 listener 在這個表格中列的內容已經改變了.列的
數目可能已經改變了,因此 JTable 可能需要重新顯示此表格的結構.
void fireTableRowsDeleted(int firstRow, int lastRow):通知所有的 listener 在這個表格中第
firstrow 行至 lastrow 列已經被刪除了.
void fireTableRowsUpdated(int firstRow, int lastRow):通知所有的 listener 在這個表格中第
firstrow 行至 lastrow 列已經被修改了.
void fireTableRowsInserted(int firstRow, int lastRow):通知所有的 listener 在這個表格中第
firstrow 行至 lastrow 列已經被加入了
.
void fireTableStructureChanged():通知所有的listener在這個表格的結構已經改變了.行的數
目,名稱以及數據類型都可能已經改變了
.
Class getColumnClass(int columnIndex):返回欄位數據類型的類名稱.
String getColumnName(int column): 若 沒 有 設 置 列 標 題 則 返 回 默 認 值 , 依 次 為
A,B,C,...Z,AA,AB,..;若無此 column,則返回一個空的 String
.
Public EventListener[] getListeners(Class listenerType):返回所有在這個 table model 所建立的
listener 中符合 listenerType 的 listener,並以數組形式返回.
boolean isCellEditable(int rowIndex, int columnIndex):返回所有在這個 table model 所建立的
listener 中符合 listenerType 形式的 listener,並以數組形式返回.
voidremoveTableModelListener(TableModelListener l):從 TableModelListener 中移除一個
listener.
voidsetValueAt(Object aValue, int rowIndex, int columnIndex)
:設置某個 cell(rowIndex,columnIndex)的值.
若你仔細比較TableModel所定義的方法與上述AbstractTableModel所提供的方法,你可以發
現,AbstractTableModel 抽象類並沒有實現
getRowCount(),getColumnCount(),getValueAt()這三個方法,這也就是為什麼我們要去實現這
三個方法的原因.下面我們來看如何使用
AbstractTableModel 來實作出自己想要的表格模式.
範例:TableModel1.java
import javax.swing.table.AbstractTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public classTableModel1{
publicTableModel1() {
JFrame f = new JFrame();
MyTable mt=new MyTable();
JTable t=new JTable(mt);
t.(new Dimension(550, 30));
JScrollPane s = new JScrollPane(t);
f.getContentPane().add(s, BorderLayout.CENTER);
f.setTitle("JTable1");
f.pack();
f.setVisible(true);
f.addWindowListener(newWindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String args[]) {
newTableModel1();
}
}
class MyTable extendsAbstractTableModel{
Object[][] p = {
{"阿獃", new Integer(66),
new Integer(32), new Integer(98), new Boolean(false),new Boolean(false)},
{"阿瓜", new Integer(85),
new Integer(69), new Integer(154), new Boolean(true),new Boolean(false)},
};
String[] n = {"姓名",
"語文",
"數學",
"總分",
"及格",
"作弊"};
public int getColumnCount() {
return n.length;
}
public int getRowCount() {
return p.length;
}
public String getColumnName(int col) {
return n[col];
}
public Object getValueAt(int row, int col) {
return p[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
上例中表格內的數據類型不論是 String,int 或是 Boolean 類型,都均以 string 的類型顯示.
例如在及格的欄位中,原本的數據是以 Boolean
類型來表示,但顯示在 JTable 上時便轉換成字元串形式,若想要使表格能顯示出不同的數據類
型,我們要在 MyTable 中 Override 寫 getColumnCl
ass()方法,這個方法可以讓我們分辨出表格中每一行的數據類型,並將此類型作適當的顯示:
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
這樣"作弊"會以 Check Box 顯示,數據類型一律靠右顯示,String 類型一律靠左顯示.
TableModel2.java
import javax.swing.table.AbstractTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public classTableModel2 implementsActionListener{
JTable t = null;
publicTableModel2() {
JFrame f = new JFrame("DataModel");
JButton b1 = new JButton("數學老師");
b1.addActionListener(this);
JButton b2 = new JButton("學生阿獃");
b2.addActionListener(this);
JPanel panel = new JPanel();
panel.add(b1);
panel.add(b2);
t=new JTable(new MyTable(1));
t.(new Dimension(550, 30));
JScrollPane s = new JScrollPane(t);
f.getContentPane().add(panel, BorderLayout.NORTH);
f.getContentPane().add(s, BorderLayout.CENTER);
f.pack();
f.setVisible(true);
f.addWindowListener(newWindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("學生阿獃"))
t.setModel(new MyTable(1));
if (e.getActionCommand().equals("數學老師"))
t.setModel(new MyTable(2));
t.revalidate();
}
public static void main(String args[]) {
newTableModel2();
}
}
class MyTable extendsAbstractTableModel{
Object[][] p1 = {
{"阿獃", "1234",new Integer(66),
new Integer(50), new Integer(116), new Boolean(false),new Boolean(false)}};
String[] n1 = {"姓名","學號","語文","數學","總分","及格","作弊"};
Object[][] p2 = {
{"阿獃", "1234",new Integer(50), new Boolean(false),new Boolean(false),"01234"},
{"阿瓜", "1235",new Integer(75), new Boolean(true),new Boolean(false),"05678"}};
String[] n2 = {"姓名","學號","數學","及格","作弊","電話"};
int model = 1;
public MyTable(int i){
model = i;
}
public int getColumnCount() {
if(model ==1)
return n1.length;
else
return n2.length;
}
public int getRowCount() {
if(model ==1)
return p1.length;
else
return p2.length;
}
public String getColumnName(int col) {
if(model ==1)
return n1[col];
else
return n2[col];
}
public Object getValueAt(int row, int col) {
if(model == 1)
return p1[row][col];
else
return p2[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
}
TableColumnModel:
TableColumnModel 本身是一個 Interface,裡面定義了許多與表格的"列(行)"有關的方法,例
如增加列,刪除列,設置與取得"列"的相關信
息.通常我們不會直接實現 TableColumnModel 界面,而是會利用 JTable 的 getColumnModel()
方法取得 TableColumnModel 對象,再利用此對象對
欄位做設置.舉例來說,如果我們想設計的表格是包括有下拉式列表的 Combo Box,我們就能
利用 TableColumnModel 來達到這樣的效果.
我們先看看下面的例子:
import javax.swing.table.AbstractTableModel;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ColumnModelTest{
public ColumnModelTest() {
JFrame f = new JFrame();
/* 由 於 我 們 的 MyTable 類 繼 承 了 AbstractTableModel 並 且 實 作 了
getColmunCount(),getRowCount(),getValueAt()方法.因此我們可以通
*過 MyTable 來產生 TableModel 的實體.
*/
MyTable mt=new MyTable();
JTable t=new JTable(mt);//我們利用 MyTable 來建立 JTable.
JComboBox c = new JComboBox();//建立一個 JComboBox 的對象.
c.addItem("Taipei");//我們在新建立的 JComboBox 對象里新增三個項目.
c.addItem("ChiaYi");
c.addItem("HsinChu");
/*我們利用 JTable 所提供的 getTableColumnModel()方法取得 TableColumnModel 對象,
再由 TableColumnModel 類所提供的 getColumn()方
*法取得 TableColumn 對象,TableColumn 類可針對表格中的每一行做具體的設置,例如
設置欄位的寬度,某行的標頭,設置輸入較復雜的
*數據類型等等.在這里,我們利用 TableColumn 類所提供的 setCellEditor()方法,將
JComboBox 作為第二行的默認編輯組件.
*/
t.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(c));
t.(new Dimension(550, 30));
JScrollPane s = new JScrollPane(t);
f.getContentPane().add(s, BorderLayout.CENTER);
f.setTitle("ColumnModelTest");
f.pack();
f.setVisible(true);
f.addWindowListener(newWindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String args[]) {
new ColumnModelTest();
}
}
class MyTable extendsAbstractTableModel{
Object[][] p = {
{"阿獃", "Taipei",new Integer(66),
new Integer(32), new Integer(98), new Boolean(false),new Boolean(false)},
{"阿瓜", "ChiaYi",new Integer(85),
new Integer(69), new Integer(154), new Boolean(true),new Boolean(false)},
};
String[] n = {"姓名",
"居住地",
"語文",
"數學",
"總分",
"及格",
"作弊"};
public int getColumnCount() {
return n.length;
}
public int getRowCount() {
return p.length;
}
public String getColumnName(int col) {
return n[col];
}
public Object getValueAt(int row, int col) {
return p[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
/*pu
㈧ 怎麼用JAVA動態生成一個表格 從資料庫讀出數據 然後用JSP頁面顯示出來 形成一個表格
放在循環老渣裡面,然後在埋宴循環體裡面畫<table>,<tr>,<td>就行了,這是很久以前學java時寫的jsp頁面里的一段,裡面加了分頁什麼的。你仔彎含銀細想想吧,這個很好理解的。
<table width="600" border="0" cellpadding="0" cellspacing="0" bordercolor="#96A353">
<tr>
<th colspan="2"><%=newDao.getnewsClassNameById(classid) %></th>
</tr>
<tr>
<td height="10" colspan="2"></td>
</tr>
<tr>
<td colspan="2"><hr color="#006600"></td>
</tr>
<%
for(int i=currPageBegin;i<intPage*intPageSize&&i<list.size();i++)
{
News news=(News)list.get(i);
%>
<tr>
<td><img src="Images/icon.gif"><a href="show_newscontent.jsp?newsid=<%=news.getNewsId() %>"><%=news.getNewsSubject() %></a></td>
<td width="100"><%=news.getNewsTime() %></td>
</tr>
<%} %>
</table>
㈨ java如何輸出xls格式的Excel表格文件
有個開源的東東-jxl.jar,可以到http://sourceforge.net/project/showfiles.php?group_id=79926下載。
一.讀取Excel文件內容
/**讀取Excel文件的內容
* @param file 待讀取的文件
* @return
*/
public static String readExcel(File file){
StringBuffer sb = new StringBuffer();
Workbook wb = null;
try {
//構造Workbook(工作薄)對象
wb=Workbook.getWorkbook(file);
} catch (BiffException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if(wb==null)
return null;
//獲得了Workbook對象之後,就可以通過它得到Sheet(工作表)對象了
Sheet[] sheet = wb.getSheets();
if(sheet!=null&&sheet.length>0){
//對每個工作表進行循環
for(int i=0;i<sheet.length;i++){
//得到當前工作表的行數
int rowNum = sheet[i].getRows();
for(int j=0;j<rowNum;j++){
//得到當前行的所有單元格
Cell[] cells = sheet[i].getRow(j);
if(cells!=null&&cells.length>0){
//對每個單元格進行循環
for(int k=0;k<cells.length;k++){
//讀取當前單元格的值
String cellValue = cells[k].getContents();
sb.append(cellValue+" ");
}
}
sb.append(" ");
}
sb.append(" ");
}
}
//最後關閉資源,釋放內存
wb.close();
return sb.toString();
}
二.寫入Excel文件
這里有很多格式了,比如文本內容加粗,加上某些顏色等,可以參考jxl的api,同時還推薦一篇不錯的文章:http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10
/**生成一個Excel文件
* @param fileName 要生成的Excel文件名
*/
public static void writeExcel(String fileName){
WritableWorkbook wwb = null;
try {
//首先要使用Workbook類的工廠方法創建一個可寫入的工作薄(Workbook)對象
wwb = Workbook.createWorkbook(new File(fileName));
} catch (IOException e) {
e.printStackTrace();
}
if(wwb!=null){
//創建一個可寫入的工作表
//Workbook的createSheet方法有兩個參數,第一個是工作表的名稱,第二個是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet("sheet1", 0);
//下面開始添加單元格
for(int i=0;i<10;i++){
for(int j=0;j<5;j++){
//這里需要注意的是,在Excel中,第一個參數表示列,第二個表示行
Label labelC = new Label(j, i, "這是第"+(i+1)+"行,第"+(j+1)+"列");
try {
//將生成的單元格添加到工作表中
ws.addCell(labelC);
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}
try {
//從內存中寫入文件中
wwb.write();
//關閉資源,釋放內存
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}
三.在一個Excel文件中查找是否包含某一個關鍵字
/**搜索某一個文件中是否包含某個關鍵字
* @param file 待搜索的文件
* @param keyWord 要搜索的關鍵字
* @return
*/
public static boolean searchKeyWord(File file,String keyWord){
boolean res = false;
Workbook wb = null;
try {
//構造Workbook(工作薄)對象
wb=Workbook.getWorkbook(file);
} catch (BiffException e) {
return res;
} catch (IOException e) {
return res;
}
if(wb==null)
return res;
//獲得了Workbook對象之後,就可以通過它得到Sheet(工作表)對象了
Sheet[] sheet = wb.getSheets();
boolean breakSheet = false;
if(sheet!=null&&sheet.length>0){
//對每個工作表進行循環
for(int i=0;i<sheet.length;i++){
if(breakSheet)
break;
//得到當前工作表的行數
int rowNum = sheet[i].getRows();
boolean breakRow = false;
for(int j=0;j<rowNum;j++){
if(breakRow)
break;
//得到當前行的所有單元格
Cell[] cells = sheet[i].getRow(j);
if(cells!=null&&cells.length>0){
boolean breakCell = false;
//對每個單元格進行循環
for(int k=0;k<cells.length;k++){
if(breakCell)
break;
//讀取當前單元格的值
String cellValue = cells[k].getContents();
if(cellValue==null)
continue;
if(cellValue.contains(keyWord)){
res = true;
breakCell = true;
breakRow = true;
breakSheet = true;
}
}
}
}
}
}
//最後關閉資源,釋放內存
wb.close();
return res;
}
四.往Excel中插入圖片圖標
插入圖片的實現很容易,參看以下代碼:
/**往Excel中插入圖片
* @param dataSheet 待插入的工作表
* @param col 圖片從該列開始
* @param row 圖片從該行開始
* @param width 圖片所佔的列數
* @param height 圖片所佔的行數
* @param imgFile 要插入的圖片文件
*/
public static void insertImg(WritableSheet dataSheet, int col, int row, int width,
int height, File imgFile){
WritableImage img = new WritableImage(col, row, width, height, imgFile);
dataSheet.addImage(img);
}
以上代碼的注釋已經很清楚了,大概也就不用再解釋了,我們可以用如下程序驗證:
try {
//創建一個工作薄
WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
//待插入的工作表
WritableSheet imgSheet = workbook.createSheet("Images",0);
//要插入的圖片文件
File imgFile = new File("D:/1.png");
//圖片插入到第二行第一個單元格,長寬各佔六個單元格
insertImg(imgSheet,0,1,6,6,imgFile);
workbook.write();
workbook.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
但是jxl只支持png格式的圖片,jpg格式和gif格式都不支持
五.插入頁眉頁腳
一般的頁眉頁腳都分為三個部分,左,中,右三部分,利用如下代碼可實現插入頁眉頁腳
/**向Excel中加入頁眉頁腳
* @param dataSheet 待加入頁眉的工作表
* @param left
* @param center
* @param right
*/
public static void setHeader(WritableSheet dataSheet,String left,String center,String right){
HeaderFooter hf = new HeaderFooter();
hf.getLeft().append(left);
hf.getCentre().append(center);
hf.getRight().append(right);
//加入頁眉
dataSheet.getSettings().setHeader(hf);
//加入頁腳
//dataSheet.getSettings().setFooter(hf);
}
我們可以用如下代碼測試該方法:
try {
//創建一個工作薄
WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
//待插入的工作表
WritableSheet dataSheet = workbook.createSheet("加入頁眉",0);
ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06", "第1頁,共3頁");
workbook.write();
workbook.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
六偷懶工具設計之sql2Excel
今天在公司陪山東客戶調試,遠程登錄,我在linux下什麼工具都沒有,用ssh登錄伺服器,直接用mysql查詢資料庫,提出記錄中的所有漢字全是亂碼。哎,可惡的公司,不讓我用windows,要不我就可以用putty或者EMS了,我ft!
甚是不爽之下,我決定自己寫個工具了,把客戶資料庫中的數據全部提取並保存到Excel中,這樣我不就可以一目瞭然了嘛,嘿嘿,好吧,那我就寫一個工具吧。
第一部分就是誰都會的jdbc操作,連接資料庫,提取數據集合。
Connection con;
Statement state;
/**初始化連接
* @param serverIp
* @param dataBase
* @param userName
* @param password
* @throws ClassNotFoundException
* @throws SQLException
*/
public void init(String serverIp,String dataBase,String userName,String password) throws ClassNotFoundException, SQLException{
Class.forName("com.mysql.jdbc.Driver");
//配置數據源
String url="jdbc:mysql://"+serverIp+"/"+dataBase+"?useUnicode=true&characterEncoding=GB2312";
con=DriverManager.getConnection(url,userName,password);
}
/**得到查詢結果集
* @param sql
* @return
* @throws SQLException
*/
public ResultSet getResultSet(String sql) throws SQLException{
state = con.createStatement();
ResultSet res = state.executeQuery(sql);
return res;
}
/**關閉連接
* @throws SQLException
*/
public void close() throws SQLException{
if(con!=null)
con.close();
if(state!=null)
state.close();
}
第二部分就是把ResultSet中的記錄寫入一個Excel文件
操作Excel,我用的是jxl,不熟的同學可以參考:利用java操作Excel文件
/**將查詢結果寫入Excel文件中
* @param rs
* @param file
* @throws SQLException
*/
public void writeExcel(ResultSet rs,File file) throws SQLException{
WritableWorkbook wwb = null;
try{
//首先要使用Workbook類的工廠方法創建一個可寫入的工作薄(Workbook)對象
wwb = Workbook.createWorkbook(file);
} catch (IOException e){
e.printStackTrace();
}
if(wwb!=null){
WritableSheet ws = wwb.createSheet("sheet1", 0);
int i=0;
while(rs.next()){
Label label1 = new Label(0, i, rs.getString("id"));
Label label2 = new Label(1, i, rs.getString("category"));
try {
ws.addCell(label1);
ws.addCell(label2);
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
i++;
}
try {
//從內存中寫入文件中
wwb.write();
//關閉資源,釋放內存
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e){
e.printStackTrace();
}
}
}
測試程序:
Sql2Excel se = new Sql2Excel();
try {
se.init("127.0.0.1","mydabase", "root", "1234");
ResultSet rs = se.getResultSet("select id,category from xx ");
se.writeExcel(rs, new File("/root/sql2excel.xls"));
se.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
㈩ Java怎麼輸出一個表格
用java輸出資料庫表 示例:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class Stmessege1 extends JFrame {
private static final long serialVersionUID = 1L;
private JTable table;/咐粗扒/凳空 聲明表格
void Stmessege11() {
setSize(460, 320);
setVisible(true);
}
public Vector getDataVector() throws SQLException, ClassNotFoundException {
Connection conn = null;
java.sql.Statement stmt = null;
Class.forName("com.mysql.jdbc.Driver");
String dburl = "jdbc:mysql://localhost:3306/hp";
String dbuser = "root";
String dbpassword = "19920102";
conn = DriverManager.getConnection(dburl, dbuser, dbpassword);
stmt = conn.createStatement();
String sql = "select* from xsgli";
ResultSet rs = stmt.executeQuery(sql);
Vector dataVector = new Vector();
while (rs.next()) {
Vector rowVector = new Vector();
for (int i = 1; i <= 7; i++) {
if (i == 2 || i == 4) {
rowVector.add(String.valueOf(rs.getInt(i)));
} else {
rowVector.add(rs.getString(i));
}
}
dataVector.add(rowVector);
}
return dataVector;
}
public Vector getColumnVector() {
Vector columnVector = new Vector();
columnVector.add("衡昌姓名");
columnVector.add("學號");
columnVector.add("性別");
columnVector.add("班級");
columnVector.add("系別");
columnVector.add("成績");
columnVector.add("專業");
return columnVector;
}
public Stmessege1() throws SQLException, ClassNotFoundException {
super();
setTitle("學生學籍數據顯示");
setBounds(100, 100, 382, 223);
// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Connection conn = null;
Statement stmt = null;
Class.forName("com.mysql.jdbc.Driver");
String dburl = "jdbc:mysql://localhost:3306/hp";
String dbuser = "root";
String dbpassword = "19920102";
conn = DriverManager.getConnection(dburl, dbuser, dbpassword);
java.sql.Statement st = conn.createStatement();
String sql = "select* from xsgli";
ResultSet rs = st.executeQuery(sql);
Vector columnVector = getColumnVector();
Vector dataVector = getDataVector();
final JScrollPane scrollPane = new JScrollPane();
getContentPane().add(scrollPane, BorderLayout.CENTER);
table = new JTable(dataVector, columnVector);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
scrollPane.setViewportView(table);
}
}