須要導包 jxljava
package com.dj.dao.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.Writer; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; public class ExcelToSql { public static void main(String[] args) { jxl.Workbook readwb = null; try { System.out.println("開始讀取"); // 構建Workbook對象, 只讀Workbook對象 // 直接從本地文件建立Workbook InputStream instream = new FileInputStream( "D:\\sanxia\\doc\\trunk\\新oa\\系統設計\\數據庫設計\\烏商項目管理平臺表結構彙總.xls"); readwb = Workbook.getWorkbook(instream); String path = "D:\\sanxia\\doc\\trunk\\新oa\\系統設計\\數據庫設計\\sql\\"; for (int sheetNum = 1; sheetNum < readwb.getNumberOfSheets(); sheetNum++) { // Sheet的下標是從0開始 // 獲取第一張Sheet表 Sheet readsheet = readwb.getSheet(sheetNum); // 獲取Sheet表中所包含的總列數 int rsColumns = readsheet.getColumns(); // 獲取Sheet表中所包含的總行數 int rsRows = readsheet.getRows(); // 獲取指定單元格的對象引用 String sql = ""; String tableName = ""; String PK = ""; for (int i = 0; i < rsRows; i++) { Cell[] str = readsheet.getRow(i); if (i == 0) { tableName = str[0].getContents().toString(); int startIndex = tableName.indexOf("("); if (-1 == startIndex) { startIndex = tableName.indexOf("("); } int endIndex = tableName.indexOf(")"); if (-1 == endIndex) { endIndex = tableName.indexOf(")"); } // System.out.println(tableName+":"+startIndex+"|"+endIndex); tableName = tableName.substring(startIndex + 1, endIndex); if (tableName == null || "".equals(tableName.trim())) { System.out.println("表名未知,請檢查"); break; } tableName = tableName.toUpperCase(); System.out.println("tableName:" + tableName); sql = sql + "drop table " + tableName + ";\n"; sql = sql + "CREATE TABLE " + tableName; sql = sql + "\n(\n"; } if (i == 1) { continue; } if (i >= 2) { if (i < 6) { if (str[5].getContents().toString().contains("PK")) { PK = PK + "," + str[1].getContents().toString(); } } String colName = String.format("%-30s", str[1] .getContents().toString()); String colSize = String.format("%-20s", str[3] .getContents().toString()); if ("M".equals(str[4].getContents().toString())) { sql = sql + "\t" + colName + " " + colSize + " NOT NULL ,\n"; } else { sql = sql + "\t" + colName + " " + colSize + " ,\n"; } } } if (PK.length() < 1) { System.out.println("表主鍵無主鍵,請自行添加,注意最後一列去掉逗號"); } else { sql = sql + "\t\t PRIMARY KEY (" + PK.substring(1) + ") \n"; } sql = sql + ");\n"; // sql = sql + // "CREATE INDEX "+tableName+".INDEX1 ON "+tableName+"(KEY1,KEY2); --請自行替換KEY一、KEY2\n"; for (int i = 0; i < rsRows; i++) { Cell[] str = readsheet.getRow(i); if (i == 0) { String tableNamePre = str[0].getContents().toString(); int startIndex = tableNamePre.indexOf("("); if (-1 == startIndex) { startIndex = tableNamePre.indexOf("("); } tableNamePre = tableNamePre.substring(0, startIndex); ; if (tableNamePre == null || "".equals(tableNamePre.trim())) { System.out.println("表名稱未知,請檢查"); break; } String comment = tableNamePre; sql = sql + "COMMENT ON TABLE " + tableName + " IS '" + comment + "'\n"; } if (i == 1) { continue; } if (i >= 2) { String remark = str[5].getContents().toString(); remark = remark.replace("'", ""); remark = remark.replace("\"", ""); remark = remark.replace(",", ""); remark = remark.replace(",", ""); remark = remark.replace("。", ""); remark = remark.replace(".", ""); String comment = ""; if ("".equals(remark.trim())) { comment = str[2].getContents().toString(); } else { comment = str[2].getContents().toString() + ": " + remark; } sql = sql + "COMMENT ON COLUMN " + tableName + "." + str[1].getContents().toString() + " IS '" + comment + "';\n"; } } sql = sql.toUpperCase(); File file = new File(path + tableName + ".sql"); Writer outTxt = new OutputStreamWriter(new FileOutputStream( file, false), "unicode"); outTxt.write(sql); outTxt.close(); } /* * //利用已經建立的Excel工做薄,建立新的可寫入的Excel工做薄 jxl.write.WritableWorkbook wwb * = Workbook.createWorkbook(new File( "F:/紅樓人物1.xls"), readwb); * //讀取第一張工做表 jxl.write.WritableSheet ws = wwb.getSheet(0); * //得到第一個單元格對象 jxl.write.WritableCell wc = ws.getWritableCell(0, * 0); //判斷單元格的類型, 作出相應的轉化 if (wc.getType() == CellType.LABEL) { * Label l = (Label) wc; l.setString("新姓名"); } //寫入Excel對象 * wwb.write(); wwb.close(); */ } catch (Exception e) { e.printStackTrace(); } finally { readwb.close(); } } }