`
jtlyuan
  • 浏览: 67387 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

将SQL Server数据表导出到Excel中

 
阅读更多
《将SQL Server数据表导出到Excel中》2007-09-13 09:14:47|  分类: JSP应用与控制 |  标签: |字号大中小 订阅 .

  在开发应用软件的过程中,有时候需要将将SQL Server数据表导出到Excel中,但并不需要在JSP页面显示,而是直接生成Excel文件。运行程序之前我们先来看一下项目要用到的表tb_record的表结构及其模拟的数据。如下图所示。



表tb_record的表结构及其模拟的数据



  运行程序,在页面中填写数据库名称,要导出的数据表的表名和欲导出的位置作息。如下图所示。



页面运行效果



单击页面中的“导出到Excel”按钮,将显示下图所示的页面提示信息。





其执行效果如下图所示。



导出后生成的Excel文件





技术要点

  在实例《利用Java Excel访问Excel》一文中是将导出的数据显示到JSP页面,那么怎样通过Java Excel将导出的数据保存到指定的Excel文件呢?

  类Workbook的静态方法createWorkbook()既可以接收JSP页面的输出流对象作为参数,又可以接收文件的绝对路径作为参数,代码如下:

File tempFile = new File(filePath);

WritableWorkbook writbook = null;

writbook = Workbook.createWorkbook(tempFile);

  其中参数filePath为保存Excel文件的绝对路径。

注意:如果在指定路径存在同名的文件,则将原文件覆盖,反之则创建该文件。



实现过程

(1)创建OperateDatabase类,OperateDatabase.java代码如下:

package mrgf;

//引入连接数据库用的包
import java.sql.*;

public class OperateDatabase {
    //定义连接数据库用的全局属性
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    int num=0;
    public OperateDatabase() {
    }

    //通过静态块加载数据库驱动
    static {
        String driverClass = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
        try {
            Class.forName(driverClass).newInstance();
        } catch (Exception ex) {
            System.out.println("------在加载数据库驱动时抛出异常,内容如下:");
            ex.printStackTrace();
        }
    }

    //获得数据库连接
    public void conndb(String dbName, String username, String password) {
        String url =
                "jdbc:sqlserver://localhost:1433;DatabaseName=" +
                dbName;
        try {
            conn = DriverManager.getConnection(url, username, password);
            stmt = conn.createStatement();
        } catch (SQLException ex) {
            System.out.println("------在建立数据库连接时抛出异常,内容如下:");
            ex.printStackTrace();
        }
    }

    //关闭数据库连接,释放资源
    public void closedb() {
        //先判断欲关闭对象是否为空,如果为空则跳过
        if (rs != null) {
            try {
                rs.close();
                rs = null;
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
        if (stmt != null) {
            try {
                stmt.close();
                stmt = null;
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
                conn = null;
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
    }

    //插入记录
    public void insert(String sql) {
        try {
            stmt.executeUpdate(sql);
        } catch (SQLException ex) {
            System.out.println("------在插入记录时抛出异常,内容如下:");
            ex.printStackTrace();
        }
    }

    //修改记录
    public void update(String sql) {
        try {
            stmt.executeUpdate(sql);
        } catch (SQLException ex) {
            System.out.println("------在修改记录时抛出异常,内容如下:");
            ex.printStackTrace();
        }
    }

    //删除记录
    public void delete(String sql) {
        try {
            stmt.executeUpdate(sql);
        } catch (SQLException ex) {
            System.out.println("------在删除记录时抛出异常,内容如下:");
            ex.printStackTrace();
        }
    }

    //查询记录,返回结果集
    public ResultSet select(String sql) {
        try {
            rs = stmt.executeQuery(sql);
        } catch (SQLException ex) {
            System.out.println("------在查询记录时抛出异常,内容如下:");
            ex.printStackTrace();
        }
        return rs;
    }

}




(2)创建OperateExcel类,OperateExcel.java代码如下:

 

package mrgf;

import java.io.*;
import java.util.*;
import jxl.*;
import jxl.format.*;
import jxl.write.*;
import jxl.write.DateTime;

public class OperateExcel {
    public OperateExcel() {
    }

    /**
     * 读取Excel
     * @param filePath
     * @param header
     * @param fieldTitle
     * @param notes
     */
    public void writeToExcel(String filePath, String header,
                             String[] fieldTitle, List notes) {

        // 在指定路径创建文件
        File tempFile = new File(filePath);
        // 创建工作薄
        WritableWorkbook writbook = null;
        try {
            writbook = Workbook.createWorkbook(tempFile);
        } catch (IOException e) {
            System.out.println("在创建工作薄时抛出异常,内容如下:");
            e.printStackTrace();
        }

        // 创建工作表并指定名称和索引位置
        WritableSheet sheet = writbook.createSheet("Sheet1", 0);

        // 设置合并单元格
        try {
            sheet.mergeCells(0, 0, fieldTitle.length - 1, 0);
            sheet.mergeCells(0, 1, fieldTitle.length - 1, 1);
            sheet.mergeCells(0, 2, fieldTitle.length - 1, 2);
        } catch (WriteException e) {
            System.out.println("在合并单元格时抛出异常,内容如下:");
            e.printStackTrace();
        }

        //预定义一些字体和格式

        // 定义表标题字体
        WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 16,
                WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
                jxl.format.Colour.BLUE);
        WritableCellFormat headerFormat = new WritableCellFormat(headerFont);
        // 设置居中显示
        try {
            headerFormat.setAlignment(jxl.format.Alignment.CENTRE);
        } catch (WriteException e) {
            System.out.println("在设置居中显示时抛出异常,内容如下:");
            e.printStackTrace();
        }

        // 定义字段标题字体
        WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10,
                                                  WritableFont.NO_BOLD, false,
                                                  UnderlineStyle.NO_UNDERLINE,
                                                  jxl.format.Colour.RED);
        WritableCellFormat titleFormat = new WritableCellFormat(titleFont);
        // 设置居中显示
        try {
            titleFormat.setAlignment(jxl.format.Alignment.CENTRE);
        } catch (WriteException e) {
            System.out.println("在设置居中显示时抛出异常,内容如下:");
            e.printStackTrace();
        }

        // 定义记录字体
        WritableFont noteFont = new WritableFont(WritableFont.ARIAL, 10,
                                                 WritableFont.NO_BOLD, false,
                                                 UnderlineStyle.NO_UNDERLINE,
                                                 jxl.format.Colour.BLACK);
        WritableCellFormat noteFormat = new WritableCellFormat(noteFont);
        // 设置居中显示
        try {
            noteFormat.setAlignment(jxl.format.Alignment.CENTRE);
        } catch (WriteException e) {
            System.out.println("在设置居中显示时抛出异常,内容如下:");
            e.printStackTrace();
        }

        // 一些临时变量,用于写到excel中
        Label lable = null;
        jxl.write.Number num = null;
        jxl.write.DateTime date = null;

        // 填写工作表
        try {
            // 填写表名
            lable = new Label(0, 1, header, headerFormat);
            sheet.addCell(lable);
            // 填写字段名
            for (int i = 0; i < fieldTitle.length; i++) {
                lable = new Label(i, 3, fieldTitle[i], titleFormat);
                sheet.addCell(lable);
            }

            // 填写记录
            int row = 4;
            int column = 0;
            Iterator itNotes = notes.iterator();
            while (itNotes.hasNext()) {
                ArrayList note = (ArrayList) itNotes.next();
                Iterator itNote = note.iterator();
                while (itNote.hasNext()) {
                    String content = (String) itNote.next();
                    lable = new Label(column, row, content, noteFormat);
                    sheet.addCell(lable);
                    column = column + 1;
                }
                row = row + 1;
                column = 0;
            }
            // 写入文件
            writbook.write();
            // 关闭工作薄对象,释放内存空间
            writbook.close();
        } catch (Exception e) {
            System.out.println("在填写工作表内容时抛出异常,内容如下:");
            e.printStackTrace();
        }
    }

}




(3)创建首页面index.jsp,代码如下:

 

<%@ page contentType="text/html; charset=GBK" %>
<html>
<head>
<title>
导出到Excel数据库中
</title>
</head>
<body bgcolor="#ffffff">
<table width="400"  border="0" cellspacing="0" cellpadding="4" background="bg.gif">
  <tr>
    <td width="50">&nbsp;</td>
    <td width="300">&nbsp;</td>
    <td width="50">&nbsp;</td>
  </tr>
<form action="dispose.jsp">
  <tr>
    <td colspan="3"><div align="center">将SQL Server数据库表导出到Excel </div></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>数据库名:<input type="text" name="database" value="db_database16"></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>数据表名:<input type="text" name="table" value="tb_record"></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>导出位置:<input type="text" name="address" value="e:/record.xls"></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><div align="right"><input type="submit" name="Submit" value="导出到Excel"></div></td>
    <td>&nbsp;</td>
  </tr>
</form>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</html>




(4)创建页面dispose.jsp,代码如下:

 

<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.lang.*" %>
<%@ page import="jxl.*" %>
<%@ page import="mrgf.*" %>
<html>
<head>
<title>
导出到Excel数据库中
</title>
</head>
<body>
<%
String database=request.getParameter("database");
String table=request.getParameter("table");
String address=request.getParameter("address");
OperateDatabase db=new OperateDatabase();
db.conndb(database,"admin","123456");
String sql="select * from "+table;
ResultSet rs=db.select(sql);
String[] fieldTitle=null;
List notes=new ArrayList();
try {
  ResultSetMetaData rsmd=rs.getMetaData();
  int columnCount=rsmd.getColumnCount();
  fieldTitle=new String[columnCount-1];
  for(int i=2;i<=columnCount;i++){
    fieldTitle[i-2]=rsmd.getColumnName(i);
  }
  while(rs.next()){
    List note=new ArrayList();
    for(int i=2;i<=columnCount;i++){
      note.add(rs.getString(i));
    }
    notes.add(note);
  }
} catch (Exception ex) {
  System.out.println("在查询数据时抛出异常,内容如下:");
  ex.printStackTrace();
}
db.closedb();
OperateExcel excel=new OperateExcel();
excel.writeToExcel(address,"未命名",fieldTitle,notes);
%>
<table width="400"  border="0" cellspacing="0" cellpadding="4" background="bg.gif">
  <tr>
    <td width="50">&nbsp;</td>
    <td width="300">&nbsp;</td>
    <td width="50">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="3"><div align="center">将SQL Server数据库表导出到Excel </div></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>数据导出结束,请到<%=address %>查看导出结果!!!</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
<form action="index.jsp">
  <tr>
    <td>&nbsp;</td>
    <td><div align="right"><input type="submit" name="Submit" value="返回"></div></td>
    <td>&nbsp;</td>
  </tr>
</form>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</html>


分享到:
评论

相关推荐

    SQL Server导出表到EXCEL文件的存储过程

    8. **插入数据**:使用`OPENROWSET`函数或其他方法将数据从SQL Server中的源表插入到Excel文件中的表中。 #### 总结: 此存储过程提供了一种简单有效的方式来将SQL Server中的数据表导出为Excel文件。通过上述步骤...

    SQLServer导出数据到Excel

    总结起来,从SQL Server导出数据到Excel主要涉及使用SQL Server Management Studio进行数据导出操作,通过SQL Server导入和导出数据向导配置数据源和目标,以及映射和预览数据。了解并掌握这一过程对于数据库管理员...

    把Sql Server里的数据导出到Excel里面!

    - 在T-SQL中,你可以使用OPENROWSET函数直接将Excel文件作为数据源读入Sql Server,然后通过INSERT INTO语句将数据导出到新表。 - 例如:`INSERT INTO YourTable SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB....

    SQL Server数据表导出器

    SQLDBExport(SQL Server数据表导出器)是一套用来完成将SQL Server2000数据库中的表结构导出到Excel 2000,并输出标准的打印报表格式的软件。 软件采用Excel 2000 中VBA开发完成,软件使用Excel中的菜单操作,与...

    SQL定时导出数据到Excel

    当涉及到将数据导出到Excel时,可以利用`OPENROWSET`与OLE DB驱动程序的组合来实现这一目标。 **示例代码**: ```sql INSERT INTO [SheetName]$ SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0', 'Excel5.0;...

    将Sql server中数据导出到excel.docx

    方法一:从Excel中导入数据到Sql Server 这种方法适用于已经存在Excel文件且需要与Sql Server进行数据交换的情况。在Excel中,通过“获取数据”功能选择Sql Server作为数据源,输入服务器名、数据库名、用户名和密码...

    SQL_Server数据与Excel表的导入导出

    通过上述步骤,我们可以有效地将 SQL Server 数据库中的数据导出到 Excel 表中。DTS 不仅简化了数据迁移的过程,还提供了灵活的数据转换和处理选项。这对于数据库管理员和开发人员来说是非常有价值的工具,可以帮助...

    将Sql server中数据导出到excel.pdf

    首先在Excel中,你需要创建一个数据连接到SQL Server,通过ODBC或OLEDB驱动程序,选择相应的数据库和表,然后执行查询将数据导入Excel。这需要确保Excel和SQL Server之间有网络连接,且用户有足够权限。 2. **利用`...

    VC++将SQLServer表导出到Excel

    在IT行业中,将数据从数据库导出到其他格式如Excel是一种常见的需求,特别是在数据分析和报告制作时。本篇文章将详细探讨如何使用VC++结合ADO(ActiveX Data Objects)技术将SQL Server中的数据导出到Excel。 首先...

    将SQL server数据写入excel表

    在给定的项目中,"将SQL server数据写入excel表"是一个具体的实现,它利用C++ Builder 2010这一集成开发环境,将数据从SQL Server数据库导出并存储到Excel表格中。这涉及到多个技术层面,包括数据库连接、查询执行、...

    导出SQLSERVER表到Excel中的完整代码和执行程序

    本主题聚焦于如何从SQL Server数据库中导出数据表到Excel文件,并且使用线程技术以提供更好的用户体验。以下是对这个过程的详细解释。 首先,我们需要理解SQL Server是Microsoft开发的一款强大的关系型数据库管理...

    SQLServer2000数据库与Excel数据表转换C#实现

    可以使用OpenXML SDK或者Microsoft.Office.Interop.Excel来读取Excel文件,然后创建SqlDataAdapter和DataSet,通过DataTable对象将数据加载到DataSet,最后使用SqlBulkCopy类批量插入到SQL Server数据库中。...

    VB导出SQLserver数据库表到Excel或WPS的代码

    可以通过VB程序将SQL Server数据库表导出到excel或WPS表中,程序自动识别你安装的是哪种办公软件,并导出之。如何通过VB连通SQL Server数据库请参见我的另一篇文章【VB连通SQL Server数据库并导出数据表个数代码程序...

    sqlserver 根据数据表生成excel数据字典

    在SQL Server Management Studio (SSMS) 中,可以选择“工具”菜单 -&gt; “导出数据”,然后按照向导的提示将查询结果保存为Excel文件。 在Excel中,我们可以对数据进行格式化,比如添加颜色编码、合并单元格、创建...

    sqlserver导出excel工具

    标题中的“sqlserver导出excel工具”指的是一个用于将SQL Server数据库中的数据导出到Microsoft Excel格式的应用程序或脚本。这种工具通常被数据库管理员和数据分析师用来方便地处理和分析存储在SQL Server中的大量...

    百万级数据在Excel和Sql数据库之间相互导入、导出

    3. **T-SQL语句**:使用Transact-SQL(T-SQL)可以直接从Excel文件导入数据到SQL Server表,或者将数据导出到CSV文件,再由Excel打开。例如,BULK INSERT命令适用于大批量导入,而SELECT INTO语句可用于创建新表并...

    将Sql Server数据查询结果输出到Excel

    通过以上步骤,我们可以实现从Sql Server查询数据,然后在Windows Forms应用程序中展示,最后将这些数据导出到Excel文件。这种功能对于数据分析师和开发者来说非常实用,能够方便地进行数据处理和报告制作。在实际...

    基于Python实现SQL SEVER与Excel间数据的批量导出.pdf

    通过这些步骤,可以完成SQL Server中数据批量导出到Excel数据表的操作。 总结来说,本文提出并实践了一种基于Python语言,利用XlsxWriter模块实现SQL Server数据库与Excel间数据批量导出的方法。通过这种方法,可以...

    sqlserver导出数据字典为excel或word

    例如,你可以选择“任务” -&gt; “生成脚本”,为整个数据库或特定对象生成脚本,然后将脚本复制到Word或Excel中。虽然这不是直接导出数据字典,但能获取相同的信息。 此外,"导出数据字典工具.exe"可能是一个第三方...

Global site tag (gtag.js) - Google Analytics