java操作Excel的一種方法:在開源世界中,有兩套比較有影響的API可供使用,一個是POI,一個是jExcelAPI。其中jExcelAPI是一個韓國程序員的作品,雖然沒有POI那樣血統(tǒng)高貴,但是在使用過程中,感覺簡單方便,對中文支持非常好,功能也比較強(qiáng)大。它的下載地址是: 當(dāng)前的最高版本是2.4。作者的網(wǎng)站上對它的特征有如下描述:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了孝感免費(fèi)建站歡迎大家使用!
● 支持Excel 95-2000的所有版本
● 生成Excel 2000標(biāo)準(zhǔn)格式
● 支持字體、數(shù)字、日期操作
● 能夠修飾單元格屬性
● 支持圖像和圖表
搭建環(huán)境
將下載后的文件解包,得到j(luò)xl.jar,放入classpath,安裝就完成了。
基本操作
一、創(chuàng)建文件
擬生成一個名為“測試數(shù)據(jù).xls”的Excel文件,其中第一個工作表被命名為“第一頁”,大致效果如下:
代碼(CreateXLS.java):
//生成Excel的類
import java.io.*;
import jxl.*;
import jxl.write.*;
public class CreateXLS
{
public static void main(String args[])
{
try
{
//打開文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“測試.xls”));
//生成名為“第一頁”的工作表,參數(shù)0表示這是第一頁
WritableSheet sheet=book.createSheet(“第一頁”,0);
//在Label對象的構(gòu)造子中指名單元格位置是第一列第一行(0,0)
//以及單元格內(nèi)容為test
Label label=new Label(0,0,”test”);
//將定義好的單元格添加到工作表中
sheet.addCell(label);
/*生成一個保存數(shù)字的單元格
必須使用Number的完整包路徑,否則有語法歧義
單元格位置是第二列,第一行,值為789.123*/
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);
//寫入數(shù)據(jù)并關(guān)閉文件
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
編譯執(zhí)行后,會在當(dāng)前位置產(chǎn)生一個Excel文件。
三、讀取文件
以剛才我們創(chuàng)建的Excel文件為例,做一個簡單的讀取操作,程序代碼如下:
//讀取Excel的類
import java.io.*;
import jxl.*;
public class ReadXLS
{
public static void main(String args[])
{
try
{
Workbook book=
Workbook.getWorkbook(new File(“測試.xls”));
//獲得第一個工作表對象
Sheet sheet=book.getSheet(0);
//得到第一列第一行的單元格
Cell cell1=sheet.getCell(0,0);
String result=cell1.getContents();
System.out.println(result);
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
程序執(zhí)行結(jié)果:test
四、修改文件
利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的時候,除了打開文件的方式不同之外,其他操作和創(chuàng)建Excel是一樣的。下面的例子是在我們已經(jīng)生成的Excel文件中添加一個工作表:
//修改Excel的類,添加一個工作表
import java.io.*;
import jxl.*;
import jxl.write.*;
public class UpdateXLS
{
public static void main(String args[])
{
try
{
//Excel獲得文件
Workbook wb=Workbook.getWorkbook(new File(“測試.xls”));
//打開一個文件的副本,并且指定數(shù)據(jù)寫回到原文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“測試.xls”),wb);
//添加一個工作表
WritableSheet sheet=book.createSheet(“第二頁”,1);
sheet.addCell(new Label(0,0,”第二頁的測試數(shù)據(jù)”));
book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}
執(zhí)行結(jié)果如圖:
高級操作
一、 數(shù)據(jù)格式化
在Excel中不涉及復(fù)雜的數(shù)據(jù)類型,能夠比較好的處理字串、數(shù)字和日期已經(jīng)能夠滿足一般的應(yīng)用。
1、 字串格式化
字符串的格式化涉及到的是字體、粗細(xì)、字號等元素,這些功能主要由WritableFont和WritableCellFormat類來負(fù)責(zé)。假設(shè)我們在生成一個含有字串的單元格時,使用如下語句,為方便敘述,我們?yōu)槊恳恍忻罴恿司幪枺?/p>
WritableFont font1=
new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); ①
WritableCellFormat format1=new WritableCellFormat(font1); ②
Label label=new Label(0,0,”data 4 test”,format1) ③
其中①指定了字串格式:字體為TIMES,字號16,加粗顯示。WritableFont有非常豐富的構(gòu)造子,供不同情況下使用,jExcelAPI的java-doc中有詳細(xì)列表,這里不再列出。
②處代碼使用了WritableCellFormat類,這個類非常重要,通過它可以指定單元格的各種屬性,后面的單元格格式化中會有更多描述。
③處使用了Label類的構(gòu)造子,指定了字串被賦予那種格式。
在WritableCellFormat類中,還有一個很重要的方法是指定數(shù)據(jù)的對齊方式,比如針對我們上面的實(shí)例,可以指定:
//把水平對齊方式指定為居中
format1.setAlignment(jxl.format.Alignment.CENTRE);
//把垂直對齊方式指定為居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
二、單元格操作
Excel中很重要的一部分是對單元格的操作,比如行高、列寬、單元格合并等,所幸jExcelAPI提供了這些支持。這些操作相對比較簡單,下面只介紹一下相關(guān)的API。
1、 合并單元格
WritableSheet.mergeCells(int m,int n,int p,int q);
作用是從(m,n)到(p,q)的單元格全部合并,比如:
WritableSheet sheet=book.createSheet(“第一頁”,0);
//合并第一列第一行到第六列第一行的所有單元格
sheet.mergeCells(0,0,5,0);
合并既可以是橫向的,也可以是縱向的。合并后的單元格不能再次進(jìn)行合并,否則會觸發(fā)異常。
2、 行高和列寬
WritableSheet.setRowView(int i,int height);
作用是指定第i+1行的高度,比如:
//將第一行的高度設(shè)為200
sheet.setRowView(0,200); 能夠獲取到j(luò)ava里面那么再封裝保存進(jìn)數(shù)據(jù)庫也就簡單了,希望這樣可以幫到你。
簡單來說,批量獲取就是把每個控件單個獲取的結(jié)果,以表格形式呈現(xiàn),并且對獲取到的控件做一個直觀的展示(“控件展示”列),以便用戶勾選需要的控件,生成代碼。
如上圖所示:
第一行為百度搜索框的抓取結(jié)果,
控件類型為“text”,
默認(rèn)勾選生成代碼,因?yàn)榭梢杂胕d唯一定位,
給出了三個可對其唯一定位的xpath:
//input[@id='kw']
//input[@name='wd']
//input[contains(@class,'s_ipt')]
控件名稱和描述都默認(rèn)取其id,可自行修改。
點(diǎn)擊全選,可以將工具抓取到的所有控件勾選,(能用ID或name唯一定位的,默認(rèn)勾選“生成代碼”)
也可以在xpath列勾選抓取到的xpath,可以把那些不穩(wěn)定的xpath勾選掉,
在最下面填寫pagebean的包名和類名后,會生成一個.Java文件,包含了bean層所有的代碼,直接拷貝到工程中即可使用。
[java] view plain copy
package bean;
import lazy.test.ui.annotations.*;
import lazy.test.ui.beans.PageBean;
import lazy.test.ui.controls.*;
import lazy.test.ui.browser.BrowserEmulator;
public class baidu extends PageBean {
@Xpath(xpath={"http://input[@id='kw']", "http://input[@name='wd']", "http://input[contains(@class,'s_ipt')]"})
@Frame(frame="")
@Description(description="kw")
public Text kw;
@Xpath(xpath={"http://input[@id='su']", "http://input[contains(@value,'百度一下')]", "http://input[contains(@class,'bg s_btn')]"})
@Frame(frame="")
@Description(description="su")
public Click su;
@Xpath(xpath={"http://a[@name='ime_hw']", "http://a[contains(text(),'手寫')]", "/html/body/div[3]/div[1]/div/div[1]/div/form/span[3]/span/ul/li[1]/a"})
@Frame(frame="")
@Description(description="imehw")
public Click imehw;
@Xpath(xpath={"http://a[@name='ime_py']", "http://a[contains(text(),'拼音')]", "/html/body/div[3]/div[1]/div/div[1]/div/form/span[3]/span/ul/li[2]/a"})
@Frame(frame="")
@Description(description="imepy")
public Click imepy;
@Xpath(xpath={"http://a[@name='ime_cl']", "http://a[contains(text(),'關(guān)閉')]", "/html/body/div[3]/div[1]/div/div[1]/div/form/span[3]/span/ul/li[4]/a"})
@Frame(frame="")
@Description(description="imecl")
public Click imecl;
@Xpath(xpath={"http://a[@name='tj_trnuomi']", "http://a[contains(text(),'糯米')]", "/html/body/div[3]/div[1]/div/div[3]/a[1]"})
@Frame(frame="")
@Description(description="tjtrnuomi")
public Click tjtrnuomi;
@Xpath(xpath={"http://a[@name='tj_trnews']", "/html/body/div[3]/div[1]/div/div[3]/a[2]"})
@Frame(frame="")
@Description(description="tjtrnews")
public Click tjtrnews;
@Xpath(xpath={"http://a[@name='tj_trhao123']", "http://a[contains(text(),'hao12')]", "/html/body/div[3]/div[1]/div/div[3]/a[3]"})
@Frame(frame="")
@Description(description="tjtrhao123")
public Click tjtrhao123;
@Xpath(xpath={"http://a[@name='tj_trmap']", "/html/body/div[3]/div[1]/div/div[3]/a[4]"})
@Frame(frame="")
@Description(description="tjtrmap")
public Click tjtrmap;
@Xpath(xpath={"http://a[@name='tj_trvideo']", "/html/body/div[3]/div[1]/div/div[3]/a[5]"})
@Frame(frame="")
@Description(description="tjtrvideo")
public Click tjtrvideo;
@Xpath(xpath={"http://a[@name='tj_trtieba']", "/html/body/div[3]/div[1]/div/div[3]/a[6]"})
@Frame(frame="")
@Description(description="tjtrtieba")
public Click tjtrtieba;
@Xpath(xpath={"http://div[@id='u1']//a[@name='tj_login']", "http://a[@name='tj_trnuomi']/parent::div/a[7]", "/html/body/div[3]/div[1]/div/div[3]/a[7]"})
@Frame(frame="")
@Description(description="tjlogin")
public Click tjlogin;
@Xpath(xpath={"http://div[@id='u1']//a[@name='tj_settingicon']", "http://a[@name='tj_trnuomi']/parent::div/a[8]", "/html/body/div[3]/div[1]/div/div[3]/a[8]"})
@Frame(frame="")
@Description(description="tjsettingicon")
public Click tjsettingicon;
@Xpath(xpath={"http://a[@name='tj_briicon']", "http://a[contains(text(),'更多產(chǎn)品')]", "http://a[contains(@class,'bri')]"})
@Frame(frame="")
@Description(description="tjbriicon")
public Click tjbriicon;
@Xpath(xpath={"http://a[@name='tj_mp3']", "/html/body/div[3]/div[1]/div/div[4]/div/div[2]/div[1]/div/a[1]"})
@Frame(frame="")
@Description(description="tjmp3")
public Click tjmp3;
@Xpath(xpath={"http://a[@name='tj_img']", "/html/body/div[3]/div[1]/div/div[4]/div/div[2]/div[1]/div/a[2]"})
@Frame(frame="")
@Description(description="tjimg")
public Click tjimg;
@Xpath(xpath={"http://a[@name='tj_zhidao']", "/html/body/div[3]/div[1]/div/div[4]/div/div[2]/div[1]/div/a[3]"})
@Frame(frame="")
@Description(description="tjzhidao")
public Click tjzhidao;
@Xpath(xpath={"http://a[@name='tj_wenku']", "/html/body/div[3]/div[1]/div/div[4]/div/div[2]/div[1]/div/a[4]"})
@Frame(frame="")
@Description(description="tjwenku")
public Click tjwenku;
@Xpath(xpath={"http://a[@name='tj_bang']", "http://a[contains(text(),'風(fēng)云榜')]", "/html/body/div[3]/div[1]/div/div[4]/div/div[2]/div[1]/div/a[5]"})
@Frame(frame="")
@Description(description="tjbang")
public Click tjbang;
@Xpath(xpath={"http://a[@name='tj_tuiguang']", "http://a[contains(text(),'百度推廣')]", "/html/body/div[3]/div[1]/div/div[4]/div/div[2]/div[1]/div/a[6]"})
@Frame(frame="")
@Description(description="tjtuiguang")
public Click tjtuiguang;
@Xpath(xpath={"http://a[@name='tj_more']", "http://a[contains(text(),'全部產(chǎn)品')]", "/html/body/div[3]/div[1]/div/div[4]/div/div[2]/div[1]/div/div/a"})
@Frame(frame="")
@Description(description="tjmore")
public Click tjmore;
@Xpath(xpath={"http://a[@id='setf']", "http://a[contains(@style,'display: inline;')]", "/html/body/div[3]/div[3]/div/div[2]/p[1]/a[2]"})
@Frame(frame="")
@Description(description="setf")
public Click setf;
public baidu(BrowserEmulator be) { super(be); }
}
預(yù)先定義好 ,,,,,,,,,靚號的規(guī)則,,,,,,再生成
MyBatis中,可以使用Generator自動生成代碼,包括DAO層、 MODEL層 、MAPPING SQL映射文件。
第一步:下載MyBatis的Generator工具
htt p:/ /mybati s.gith ub.i o/generator/
第二步:配置自動生成代碼所需的XML配置文件,例如(generator.xml)
將這個文件保存至你下載的mybatis-generator-core-1.3.2文件夾下
第三步:進(jìn)入XML配置文件(generator.xml)所在的的目錄并執(zhí)行命令:
Dos代碼
java -jar E:\mybatis-generator-core-1.3.2\lib\mybatis-generator-core-1.3.2.j ar -configfile generator.xml -overwrite
mybatis generator eclipse插件的安裝
打開eclipse,點(diǎn)擊HelpSoftware Update
選擇 "Available Software" 標(biāo)簽,點(diǎn)擊 "Add Site" 按鈕
輸入以下信息:
Location:htt p:/ /mybatis.googleco de.c om/svn/sub-projects/gen erator/trunk/eclipse/UpdateSite/
點(diǎn)擊ok,自動進(jìn)入"mybatis generator Feature"
點(diǎn)擊“install”按鈕進(jìn)行安裝。。。。mybatis generator 插件安裝完成
配置Mybatis Generator不要生成Example類
Mybatis Generator默認(rèn)設(shè)置會生成一大堆羅哩羅嗦的Example類,主要是用各種不同的條件來操作數(shù)據(jù)庫,大部分是用不到的,用到的時候手工修改mapper和接口文件就行了。
/codetable
schema="general"
tableName="tb_table_name"
domainObjectName="EntityName"
enableCountByExample="false"
enableUpdateByExample="false"
enableDeleteByExample="false"
enableSelectByExample="false"
selectByExampleQueryId="false"
name="useActualColumnNames"
value="true"/
//codetable
這樣生成的mapper和dao接口就清爽多了。
可以的,我說說大概思路,很簡單,你自己具體實(shí)現(xiàn)吧,把代碼寫給你沒意義的:
1.將你這段字符串輸出到一個文件里,用Java類文件的方式命名。
2.調(diào)用外部javac命令將該文件編譯。
3.用類加載器(ClassLoad)動態(tài)加載新的class文件并用Class.forName()注冊該類,然后就可以正常使用了。
上面的每一步都能在baidu中找到實(shí)現(xiàn)方法,自己發(fā)揮吧。
zip包,然后自動下載下來
1.預(yù)先定義好模板
2.界面輸入相關(guān)參數(shù)
3.解析模板生成代碼并下載
最后放出源代碼:
package com.et.controller.system.createcode;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.et.controller.base.BaseController;
import com.et.util.DelAllFile;
import com.et.util.FileDownload;
import com.et.util.FileZip;
import com.et.util.Freemarker;
import com.et.util.PageData;
import com.et.util.PathUtil;
/**
* 類名稱:FreemarkerController
* 創(chuàng)建人:Harries
* 創(chuàng)建時間:2015年1月12日
* @version
*/
@Controller
@RequestMapping(value=”/createCode”)
public class CreateCodeController extends BaseController {
/**
* 生成代碼
*/
@RequestMapping(value=”/proCode”)
public void proCode(HttpServletResponse response) throws Exception{
PageData pd = new PageData();
pd = this.getPageData();
/* ============================================================================================= */
String packageName = pd.getString(“packageName”); //包名 ========1
String objectName = pd.getString(“objectName”); //類名 ========2
String tabletop = pd.getString(“tabletop”); //表前綴 ========3
tabletop = null == tabletop?””:tabletop.toUpperCase(); //表前綴轉(zhuǎn)大寫
String zindext = pd.getString(“zindex”); //屬性總數(shù)
int zindex = 0;
if(null != zindext !””.equals(zindext)){
zindex = Integer.parseInt(zindext);
}
ListString[] fieldList = new ArrayListString[](); //屬性集合 ========4
for(int i=0; i zindex; i++){
fieldList.add(pd.getString(“field”+i).split(“,fh,”)); //屬性放到集合里面
}
MapString,Object root = new HashMapString,Object(); //創(chuàng)建數(shù)據(jù)模型
root.put(“fieldList”, fieldList);
root.put(“packageName”, packageName); //包名
root.put(“objectName”, objectName); //類名
root.put(“objectNameLower”, objectName.toLowerCase()); //類名(全小寫)
root.put(“objectNameUpper”, objectName.toUpperCase()); //類名(全大寫)
root.put(“tabletop”, tabletop); //表前綴
root.put(“nowDate”, new Date()); //當(dāng)前日期
DelAllFile.delFolder(PathUtil.getClasspath()+”admin/ftl”); //生成代碼前,先清空之前生成的代碼
/* ============================================================================================= */
String filePath = “admin/ftl/code/”; //存放路徑
String ftlPath = “createCode”; //ftl路徑
/*生成controller*/
Freemarker.printFile(“controllerTemplate.ftl”, root, “controller/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName+”Controller.java”, filePath, ftlPath);
/*生成service*/
Freemarker.printFile(“serviceTemplate.ftl”, root, “service/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName+”Service.java”, filePath, ftlPath);
/*生成mybatis xml*/
Freemarker.printFile(“mapperMysqlTemplate.ftl”, root, “mybatis_mysql/”+packageName+”/”+objectName+”Mapper.xml”, filePath, ftlPath);
Freemarker.printFile(“mapperOracleTemplate.ftl”, root, “mybatis_oracle/”+packageName+”/”+objectName+”Mapper.xml”, filePath, ftlPath);
/*生成SQL腳本*/
Freemarker.printFile(“mysql_SQL_Template.ftl”, root, “mysql數(shù)據(jù)庫腳本/”+tabletop+objectName.toUpperCase()+”.sql”, filePath, ftlPath);
Freemarker.printFile(“oracle_SQL_Template.ftl”, root, “oracle數(shù)據(jù)庫腳本/”+tabletop+objectName.toUpperCase()+”.sql”, filePath, ftlPath);
/*生成jsp頁面*/
Freemarker.printFile(“jsp_list_Template.ftl”, root, “jsp/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName.toLowerCase()+”_list.jsp”, filePath, ftlPath);
Freemarker.printFile(“jsp_edit_Template.ftl”, root, “jsp/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName.toLowerCase()+”_edit.jsp”, filePath, ftlPath);
/*生成說明文檔*/
Freemarker.printFile(“docTemplate.ftl”, root, “說明.doc”, filePath, ftlPath);
//this.print(“oracle_SQL_Template.ftl”, root); 控制臺打印
/*生成的全部代碼壓縮成zip文件*/
FileZip.zip(PathUtil.getClasspath()+”admin/ftl/code”, PathUtil.getClasspath()+”admin/ftl/code.zip”);
/*下載代碼*/
FileDownload.fileDownload(response, PathUtil.getClasspath()+”admin/ftl/code.zip”, “code.zip”);
}
}
網(wǎng)頁名稱:java批量生成代碼 快速生成代碼
文章來源:http://chinadenli.net/article12/hppodc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站改版、關(guān)鍵詞優(yōu)化、標(biāo)簽優(yōu)化、網(wǎng)頁設(shè)計公司、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)