@Test
public void createXls() throws Exception{
HSSFWorkbook wb = new HSSFWorkbook()
//声明表
HSSFSheet sheet = wb.createSheet("第一个表")
//声明行
HSSFRow row = sheet.createRow(7)
//声明列
HSSFCell cel = row.createCell(3)
//写入数据
cel.setCellValue("你也好")
FileOutputStream fileOut = new FileOutputStream("d:/a/b.xls")
wb.write(fileOut)
fileOut.close()
}
第二步:导出指定数据库的所有表
分析:
1:某个数数据库有多少表,表名是什么?―――DataBaseMetadate.getMetadate().getTables(null,null,null,new String[]{Table}) - excel的文件名称。
2:对每一个表进行select * *** 作。 - 每一个sheet的名称。
3:分析表结构,rs.getMetadate()ResultSetMedated
4:多个列,列名是什么.- 字段名就是sheet的第一行信息。
5:获取每一行的数据 – 放到sheet第一行以后。
@Test
public void export() throws Exception{
//声明需要导出的数据库
String dbName = "focus"
//声明book
HSSFWorkbook book = new HSSFWorkbook()
//获取Connection,获取db的元数据
Connection con = DataSourceUtils.getConn()
//声明statemen
Statement st = con.createStatement()
//st.execute("use "+dbName)
DatabaseMetaData dmd = con.getMetaData()
//获取数据库有多少表
ResultSet rs = dmd.getTables(dbName,dbName,null,new String[]{"TABLE"})
//获取所有表名 - 就是一个sheet
List<String>tables = new ArrayList<String>()
while(rs.next()){
String tableName = rs.getString("TABLE_NAME")
tables.add(tableName)
}
for(String tableName:tables){
HSSFSheet sheet = book.createSheet(tableName)
//声明sql
String sql = "select * from "+dbName+"."+tableName
//查询数据
rs = st.executeQuery(sql)
//根据查询的结果,分析结果集的元数据
ResultSetMetaData rsmd = rs.getMetaData()
//获取这个查询有多少行
int cols = rsmd.getColumnCount()
//获取所有列名
//创建第一行
HSSFRow row = sheet.createRow(0)
for(int i=0i<colsi++){
String colName = rsmd.getColumnName(i+1)
//创建一个新的列
HSSFCell cell = row.createCell(i)
//写入列名
cell.setCellValue(colName)
}
//遍历数据
int index = 1
while(rs.next()){
row = sheet.createRow(index++)
//声明列
for(int i=0i<colsi++){
String val = rs.getString(i+1)
//声明列
HSSFCell cel = row.createCell(i)
//放数据
cel.setCellValue(val)
}
}
}
con.close()
book.write(new FileOutputStream("d:/a/"+dbName+".xls"))
}
要使用CMD命令窗口首先的将MYSQL环境变量设置到 *** 作系统中,这是第一步,导出MYSQL数据的命令如下:
mysqldump -u root [-p password] database [table] >x.sql
注:root的登录数据库的用户名;database为使用到的数据库;table为表名;x.sql为导出的sql脚本
这样导出为一个SQL脚本文件,里面包括所有的建表语句与数据插入语句,
而数据导入也差不多,给传入一个SQL脚本,语句如下:
source d:/mysql.sql
用jxl来实现import jxl.Cell
import jxl.Sheet
import jxl.Workbookpublic String importEnter(HttpServletRequest request) {
Connection conn = null
PreparedStatement ps = null
OpenDbBean db = new OpenDbBean()
String message = ""
try {
ServletInputStream is = request.getInputStream()
byte[] junk = new byte[1024]
int bytesRead = 0
//去掉浏览器发送的垃圾信息
bytesRead = is.readLine(junk, 0, junk.length)
bytesRead = is.readLine(junk, 0, junk.length)
bytesRead = is.readLine(junk, 0, junk.length)
bytesRead = is.readLine(junk, 0, junk.length)
Workbook workbook = Workbook.getWorkbook(is)
//取得第一个工作录
Sheet sheet = workbook.getSheet(0)
//从第二行开始取数据并处理
Enter enter = new Enter()
//连接数据库
conn = db.getConnection()
String sql =
"insert into haocai_enter(enter_id,enter_time,amount,jsr,type_id,xh)"
+ " values(s_enter_id.nextval,to_date(?,'dd/mm/yyyy'),?,?,?,?)"
ps = conn.prepareStatement(sql)
int okCount = 0
ArrayList errorRows = new ArrayList()
for (int i = 1 i < sheet.getRows() i++) {
DB mydb = new DB()
Cell[] c = sheet.getRow(i)
String type_id = enter.getTypeIdByPm(c[PM].getContents())
if (type_id != null) {
//设置入库数据
ps.setString(1, c[ENTER_TIME].getContents())
ps.setString(2, c[AMOUNT].getContents())
ps.setString(3, c[JSR].getContents())
ps.setString(4, type_id)
ps.setString(5, c[XH].getContents())
ps.addBatch()
okCount++
} else {
message += "<br>第" + i + "行 " + c[PM].getContents() + " 导入失败"
}
}
//执行该批过程
if (okCount > 0) {
ps.executeBatch()
}
message += "<br>成功导入" + okCount + " 行"
workbook.close()
} catch (Exception e) {
System.out.println(e.getMessage())
message += "<br>" + e.getMessage()
} finally {
try {
db.CleanConnection(conn, ps, null)
} catch (SQLException e1) {
e1.printStackTrace()
}
}
return message
}
用jxl.jar或者poi都可以,poi可以到apache网站上去下。
利用Java 创建和读取Excel文档
为了保证示例程序的运行,必须安装Java 2 sdk1.4.0 和Jakarta POI,Jakarta POI的Web站点是: http://jakarta.apache.org/poi/
示例1将演示如何利用Jakarta POI API 创建Excel 文档。
示例1程序如下:
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.hssf.usermodel.HSSFSheet
import org.apache.poi.hssf.usermodel.HSSFRow
import org.apache.poi.hssf.usermodel.HSSFCell
import java.io.FileOutputStream
public class CreateXL {
/** Excel 文件要存放的位置,假定在D盘JTest目录下*/
public static String outputFile="D:/JTest/ gongye.xls"
public static void main(String argv[])
{
try
{
// 创建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook()
// 在Excel工作簿中建一工作表,其名为缺省值
// 如要新建一名为"效益指标"的工作表,其语句为:
// HSSFSheet sheet = workbook.createSheet("效益指标")
HSSFSheet sheet = workbook.createSheet()
// 在索引0的位置创建行(最顶端的行)
HSSFRow row = sheet.createRow((short)0)
//在索引0的位置创建单元格(左上端)
HSSFCell cell = row.createCell((short) 0)
// 定义单元格为字符串类型
cell.setCellType(HSSFCell.CELL_TYPE_STRING)
// 在单元格中输入一些内容
cell.setCellValue("增加值")
// 新建一输出文件流
FileOutputStream fOut = new FileOutputStream(outputFile)
// 把相应的Excel 工作簿存盘
workbook.write(fOut)
fOut.flush()
// *** 作结束,关闭文件
fOut.close()
System.out.println("文件生成...")
}catch(Exception e) {
System.out.println("已运行 xlCreate() : " + e )
}
}
}
读取Excel文档中的数据
示例2将演示如何读取Excel文档中的数据。假定在D盘JTest目录下有一个文件名为gongye.xls的Excel文件。
示例2程序如下:
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.hssf.usermodel.HSSFSheet
import org.apache.poi.hssf.usermodel.HSSFRow
import org.apache.poi.hssf.usermodel.HSSFCell
import java.io.FileInputStream
public class ReadXL {
/** Excel文件的存放位置。注意是正斜线*/
public static String fileToBeRead="D:/JTest/ gongye.xls"
public static void main(String argv[]){
try{
// 创建对Excel工作簿文件的引用
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead))
// 创建对工作表的引用。
// 本例是按名引用(让我们假定那张表有着缺省名"Sheet1")
HSSFSheet sheet = workbook.getSheet("Sheet1")
// 也可用getSheetAt(int index)按索引引用,
// 在Excel文档中,第一张工作表的缺省索引是0,
// 其语句为:HSSFSheet sheet = workbook.getSheetAt(0)
// 读取左上端单元
HSSFRow row = sheet.getRow(0)
HSSFCell cell = row.getCell((short)0)
// 输出单元内容,cell.getStringCellValue()就是取所在单元的值
System.out.println("左上端单元是: " + cell.getStringCellValue())
}catch(Exception e) {
System.out.println("已运行xlRead() : " + e )
}
}
}
设置单元格格式
在这里,我们将只介绍一些和格式设置有关的语句,我们假定workbook就是对一个工作簿的引用。在Java
中,第一步要做的就是创建和设置字体和单元格的格式,然后再应用这些格式:
1、创建字体,设置其为红色、粗体:
HSSFFont font = workbook.createFont()
font.setColor(HSSFFont.COLOR_RED)
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD)
2、创建格式
HSSFCellStyle cellStyle= workbook.createCellStyle()
cellStyle.setFont(font)
3、应用格式
HSSFCell cell = row.createCell((short) 0)
cell.setCellStyle(cellStyle)
cell.setCellType(HSSFCell.CELL_TYPE_STRING)
cell.setCellValue("标题 ")
总之,如本篇文章所演示的一样,Java程序员不必担心Excel工作表中的数据了,利用Jakarta POI API,
我们就可以轻易的在程序中存取Excel文档。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)