你试试我这个吧!我的可以啊
public class DbToExcelMain { public static void main(String[] args) {
Connection con = null;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
try {
con = DriverManager
.getConnection("jdbc:jtds:sqlserver://localhost:1433/userDB;user=sa;pwd=;");
} catch (SQLException e1) {
e1.printStackTrace();
}
PreparedStatement ps = null;
ResultSet rs = null;
String sql = "select uid as 编号, username as 姓名,password as 密码,email as 电子邮件 from userInfo";
try {
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
ResultSetMetaData md = rs.getMetaData(); HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(0, "学员信息", HSSFWorkbook.ENCODING_UTF_16);
HSSFRow row = sheet.createRow((short) 0);
HSSFCell cell;
int nColumn = md.getColumnCount();
// 写入各个字段的名称
for (int i = 1; i <= nColumn; i++) {
cell = row.createCell((short) (i - 1));
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(md.getColumnLabel(i));
} int iRow = 1;
// 写入各条记录,每条记录对应Excel中的一行
while (rs.next()) {
row = sheet.createRow((short) iRow);
for (int j = 1; j <= nColumn; j++) {
cell = row.createCell((short) (j - 1));
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue(rs.getObject(j).toString());
}
iRow++;
}
FileOutputStream fOut;
try {
fOut = new FileOutputStream("d:/userInfo" + ".xls");
workbook.write(fOut);
fOut.flush();
fOut.close();
} catch (IOException e) {
e.printStackTrace();
}
System.err.println("数据库的数据导出到Excel成功!");
JOptionPane.showMessageDialog(null, "数据库的数据导出到Excel成功!");
} catch (SQLException e) {
e.printStackTrace();
}
}}

解决方案 »

  1.   

    我修改的部分,没有使用你的数据,而是虚假的写了几个数。如果有问题,只可能
    1 你的Excel有问题,
    2 你的写入的数据有问题这2个的原因我都无法猜测
      public void writeExcel(String fileName) {
        // 目标文件
        File file = new File(fileName);
        FileOutputStream fOut = null;
        try {
          // 创建新的Excel 工作簿
          HSSFWorkbook workbook = new HSSFWorkbook();
          // 在Excel工作簿中建一工作表,其名为缺省值。
          // 也可以指定工作表的名字。
          HSSFSheet sheet = workbook.createSheet("data_Table");
          // 创建单元格的格式,如居中、左对齐等
          HSSFCellStyle cellStyle = workbook.createCellStyle();
          // 水平方向上居中对齐
          cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
          // 垂直方向上居中对齐
          cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
          // 下面将建立一个4行3列的表。第一行为表头。
          int rowNum = 0;// 行标
          int colNum = 0;// 列标
          // 建立表头信息
          // 在索引0的位置创建行(最顶端的行)
          HSSFRow row = sheet.createRow((short) rowNum);
          // 单元格
          HSSFCell cell = null;
          // 获取数据库数据1000条。
          for (colNum = 0; colNum < 6; colNum++) {
            // 在当前行的colNum列上创建单元格
            cell = row.createCell((short) colNum);
            // 定义单元格为字符类型,也可以指定为日期类型、数字类型
            cell.setCellType(HSSFCell.CELL_TYPE_STRING);
            // 定义编码方式,为了支持中文,这里使用了ENCODING_UTF_16
            cell.setEncoding(HSSFCell.ENCODING_UTF_16);
            // 为单元格设置格式
            cell.setCellStyle(cellStyle);
            // 添加内容至单元格
            cell.setCellValue("表头名-" + colNum);
          }
          // rowNum++;
          for (; rowNum < 3; rowNum++) {
            // 新建第rowNum行
            row = sheet.createRow((short) rowNum);
            for (colNum = 0; colNum < 6; colNum++) {
              // 在当前行的colNum位置创建单元格
              cell = row.createCell((short) colNum);
              cell.setEncoding(HSSFCell.ENCODING_UTF_16);
              cell.setCellStyle(cellStyle);
              if (colNum == 0)
                cell.setCellValue(1);
              if (colNum == 1)
                cell.setCellValue(0);
              if (colNum == 2)
                cell.setCellValue(1);
              if (colNum == 3)
                cell.setCellValue(-1);
              if (colNum == 4)
                cell.setCellValue("Name" + rowNum);
              if (colNum == 5)
                cell.setCellValue("Content" + rowNum);
            }
          }
          // 工作薄建立完成,下面将工作薄存入文件
          // 新建一输出文件流
          fOut = new FileOutputStream(file);
          // 把相应的Excel 工作簿存盘
          workbook.write(fOut);
          fOut.flush();
          // 操作结束,关闭文件
          fOut.close();
          System.out.println("Excel文件生成成功!Excel文件名:" + file.getAbsolutePath());
        } catch (Exception e) {
          System.out.println("Excel文件" + file.getAbsolutePath() + "生成失败:" + e);
        } finally {
          if (fOut != null) {
            try {
              fOut.close();
            } catch (IOException e1) {}
          }
        }
      }
      

  2.   

    竹子,还是不行啊,我的数据怎么能影响到我的Excel呢,搞不明白!!!!!!急急急!!!谁来帮我解答一下!!!
    谢谢了!!!
      

  3.   

    是啊!竹子,你的代码可以正常运行啊,我的数据就是F列,content,mysql里的longtext类型,有问题吗?POI需要什么设置吗?郁闷 不写F列的话,我的程序也不会出问题,写了就挂~~郁闷ing~~~~这是content字段的一条数据
    -----------------------------
    定位点的工具。考生在练习时要渐渐习惯通过人物、时间、地点、数字和专有名词找出题目中的文章定位点。当考生可以熟练解答科普类文章的文章内容时,就会很快做出其他文体的文章。 <BR><BR>  雅思阅读的题目里主要是判断题、选择题、填空题和图表题等。其中最难的题型就是判断题,因为有很多时候考生无法在错误选项和无关选项上做出判断。这种题目是要求考生在读完文章后判断句子是否真实,有三种可能:真实、虚假和未提供。实际上这种题目是为了取得高分才设计的,考生先要把最基本的题目做好,再来做这种题目。对于这种题目,考生要找出每句话主语的关键词回文定为就可以了。其他题型中填空题主要是细节类题目,考生直接按照速读的方法到文章中找答案即可。图表类题目需要考生根据图片和文章结合做出答案,主要是找出文章中的名词和形容词,根据名词和形容词找出正确的图片。 <BR><BR>  综合以上内容,考生在120天的时间段内主要是练习读文章的能力并且熟悉常考题型。熟能生巧,相信考生通过大量练习会在阅读上有质的突破的。
    -------------------------------------
    有的要比这个多很多,还有html标签在里面。
      

  4.   

    breezewj 也认识小雨哦,哎呀,这可咋办吖!难道我rp不好,怎么老碰上棘手的问题。残酷啊!!
      

  5.   

    代码应该没有问题。
    office重装下试试吧 
      

  6.   

    小雨,偶是MS,偶来接分的................o(∩_∩)o...
      

  7.   


    竹子 我都测试过了,如果不放content字段上去的话,我的Excel写入没问题的。一加入content字段,我上面的问题就来了...
      

  8.   

    补充个很奇怪的现象,我用mysql的GUI工具navicat导出数据name(标题),content(内容)到Excel,居然没有任何问题,Excel可以正常打开,也就是我的content字段没有超过Excel单元格的最大限制。
    那么我怀疑:1、我的程序有问题,但是竹子他们都没说那里出了问题...
    2、POI有Bug
    3、rpwt哼哼 我想3是不会有可能的。前两个问题 测试中......(打算用jxl试试看...)
      

  9.   

    期待C友们的回答 为了楼上热心的各位 暂时结贴 lz还未找到答案 
      

  10.   

    excel单元格字符串长度只支持32767,超过这个长度excel就打不开了。。
      

  11.   

    这个问题我碰到过,
       如果没猜错的话,你的excel里面有许多样式和公式,将这些东西全部去掉,然后再重新导入,我当时就是这样解决的