社区
VBA
帖子详情
如何用SQL语句直接读取Excel表中某些指定的单元格数据?
MyAngel
2003-08-20 10:19:50
如何用SQL语句直接读取Excel表中某些指定的单元格数据?
...全文
393
5
打赏
收藏
如何用SQL语句直接读取Excel表中某些指定的单元格数据?
如何用SQL语句直接读取Excel表中某些指定的单元格数据?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dary_zhou
2003-08-25
打赏
举报
回复
我建义打开EXCEL文件,然后用RANG直接取,没有那么容易出错
hxy2003
2003-08-25
打赏
举报
回复
UP
lihonggen0
2003-08-25
打赏
举报
回复
微软的答案:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;278973
xingnup
2003-08-22
打赏
举报
回复
对啊,用Cells或 Range 都可以啊.
lzqgj
2003-08-20
打赏
举报
回复
没必要,直接cells(i,j).value就行了
易语言在高级表格上
直接
修改
数据
/而且
直接
修改SQL
易语言在高级表格上
直接
修改
数据
/而且
直接
修改SQL,这个东西很简单很简单。从
数据
库里
读取
数据
并显示在高级表格里,
直接
在高级表格上修改某条记录,会对应修改
数据
库里的
数据
,没修改的不改变。在
数据
比较多的情况下还是比较好的。原理很简单,代码也很粗糙。@clocks。
Excel
数据
操纵-jar包-jxl.jar
通过java操作
excel
表格的工具类库 支持
Excel
95-2000的所有版本 生成
Excel
2000标准格式 支持字体、数字、日期操作 能够修饰
单元格
属性 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理
Excel
文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 搭建环境 将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。 (很大总是不能很好的加载,我想补充一下:把你下载好的JXL.JAR包放入D:\JAVA\jre\lib\ext中(我的是JDK1.6)就OK了。我相信在配置TOMCAT时也需要把相关的三个包放到这里面。) 基本操作 一、创建文件 拟生成一个名为“测试
数据
.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”)); //生成名为“第一页”的工作表,参数0表示这是第一页 WritableSheet sheet=book.createSheet(“第一页”,0); //在Label对象的构造子中指名
单元格
位置是第一列第一行(0,0) //以及
单元格
内容为test Label label=new Label(0,0,”test”); //将定义好的
单元格
添加到工作
表中
sheet.addCell(label); /*生成一个保存数字的
单元格
必须使用Number的完整包路径,否则有语法歧义
单元格
位置是第二列,第一行,值为789.123*/ jxl.write.Number number = new jxl.write.Number(1,0,789.123); sheet.addCell(number); //写入
数据
并关闭文件 book.write(); book.close(); }catch(Exception e) { System.out.println(e); } } } 编译执行后,会在当前位置产生一个
Excel
文件。 三、
读取
文件 以刚才我们创建的
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); } } } 程序执行结果:test 四、修改文件 利用j
Excel
API可以修改已有的
Excel
文件,修改
Excel
文件的时候,除了打开文件的方式不同之外,其他操作和创建
Excel
是一样的。下面的例子是在我们已经生成的
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”)); //打开一个文件的副本,并且
指定
数据
写回到原文件 WritableWorkbook book= Workbook.createWorkbook(new File(“测试.xls”),wb); //添加一个工作表 WritableSheet sheet=book.createSheet(“第二页”,1); sheet.addCell(new Label(0,0,”第二页的测试
数据
”)); book.write(); book.close(); }catch(Exception e) { System.out.println(e); } } } 执行结果如图: 高级操作 一、
数据
格式化 在
Excel
中不涉及复杂的
数据
类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。 1、 字串格式化 字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的
单元格
时,使用如下语句,为方便叙述,我们为每一行命令加了编号: WritableFont font1= new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); 或//设置字体格式为
excel
支持的格式 WritableFont font3=new WritableFont(WritableFont.createFont("楷体_GB2312"),12,WritableFont.NO_BOLD );① WritableCellFormat format1=new WritableCellFormat(font1); ② Label label=new Label(0,0,”data 4 test”,format1) ③ 其中①
指定
了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,j
Excel
API的java-doc中有详细列表,这里不再列出。 ②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以
指定
单元格
的各种属性,后面的
单元格
格式化中会有更多描述。 ③处使用了Label类的构造子,
指定
了字串被赋予那种格式。 在WritableCellFormat类中,还有一个很重要的方法是
指定
数据
的对齐方式,比如针对我们上面的实例,可以
指定
: //把水平对齐方式
指定
为居中 format1.setAlignment(jxl.format.Alignment.CENTRE); //把垂直对齐方式
指定
为居中 format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //设置自动换行 format1.setWrap(true); 二、
单元格
操作
Excel
中很重要的一部分是对
单元格
的操作,比如行高、列宽、
单元格
合并等,所幸j
Excel
API提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的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); 合并既可以是横向的,也可以是纵向的。合并后的
单元格
不能再次进行合并,否则会触发异常。 2、 行高和列宽 WritableSheet.setRowView(int i,int height); 作用是
指定
第i+1行的高度,比如: //将第一行的高度设为200 sheet.setRowView(0,200); WritableSheet.setColumnView(int i,int width); 作用是
指定
第i+1列的宽度,比如: //将第一列的宽度设为30 sheet.setColumnView(0,30); 五、操作图片 public static void write()throws Exception{ WritableWorkbook wwb=Workbook.createWorkbook(new File("c:/1.xls")); WritableSheet ws=wwb.createSheet("Test Sheet 1",0); File file=new File("C:\\jbproject\\PVS\\WebRoot\\weekhit\\1109496996281.png"); WritableImage image=new WritableImage(1, 4, 6, 18,file); ws.addImage(image); wwb.write(); wwb.close(); } 很简单和插入
单元格
的方式一样,不过就是参数多了些,WritableImage这个类继承了Draw,上面只是他构造方法的一种,最后一个参数不用了说了,前面四个参数的类型都是double,依次是 x, y, width, height,注意,这里的宽和高可不是图片的宽和高,而是图片所要占的单位格的个数,因为继承的Draw所以他的类型必须是double,具体里面怎么实现的我还没细看:)因为着急赶活,先完成功能,其他的以后有时间慢慢研究。以后会继续写出在使用中的心得给大家。 读: 读的时候是这样的一个思路,先用一个输入流(InputStream)得到
Excel
文件,然后用jxl中的Workbook得到工作薄,用Sheet从工作薄中得到工作表,用Cell得到工作
表中
得某个
单元格
. InputStream->Workbook->Sheet->Cell,就得到了
excel
文件中的
单元格
代码: String path="c:\\
excel
.xls";//
Excel
文件URL InputStream is = new FileInputStream(path);//写入到FileInputStream jxl.Workbook wb = Workbook.getWorkbook(is); //得到工作薄 jxl.Sheet st = wb.getSheet(0);//得到工作薄中的第一个工作表 Cell cell=st.getCell(0,0);//得到工作表的第一个
单元格
,即A1 String content=cell.getContents();//getContents()将Cell中的字符转为字符串 wb.close();//关闭工作薄 is.close();//关闭输入流 我们可以通过Sheet的getCell(x,y)方法得到任意一个
单元格
,x,y和
excel
中的坐标对应. 例如A1对应(0,0),A2对应(0,1),D3对应(3,2).
Excel
中坐标从A,1开始,jxl中全部是从0开始. 还可以通过Sheet的getRows(),getColumns()方法得到行数列数,并用于循环控制,输出一个sheet中的所有内容. 写: 往
Excel
中写入内容主要是用jxl.write包中的类. 思路是这样的: OutputStream<-WritableWorkbook<-WritableSheet<-Label 这里面Label代表的是写入Sheet的Cell位置及内容. 代码: OutputStream os=new FileOutputStream("c:\\test.xls");//输出的
Excel
文件URL WritableWorkbook wwb = Workbook.createWorkbook(os);//创建可写工作薄 WritableSheet ws = wwb.createSheet("sheet1", 0);//创建可写工作表 Label labelCF=new Label(0, 0, "hello");//创建写入位置和内容 ws.addCell(labelCF);//将Label写入sheet中 Label的构造函数Label(int x, int y,String aString)xy意同读的时候的xy,aString是写入的内容. WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//设置写入字体 WritableCellFormat wcfF = new WritableCellFormat(wf);//设置CellFormat Label labelCF=new Label(0, 0, "hello");//创建写入位置,内容和格式 Label的另一构造函数Label(int c, int r, String cont, CellFormat st)可以对写入内容进行格式化,设置字体及其它的属性. 现在可以写了 wwb.write(); 写完后关闭 wwb.close(); 输出流也关闭吧 os.close; OK,只要把读和写结合起来,就可以在N个
Excel
中
读取
数据
写入你希望的
Excel
新
表中
,还是比较方便的. 下面是程序一例: 程序代码:sql = "select * from tablename"; rs = stmt.executeQuery(sql); //新建
Excel
文件 String filePath=request.getRealPath("aaa.xls"); File myFilePath=new File(filePath); if(!myFilePath.exists()) myFilePath.createNewFile(); FileWriter resultFile=new FileWriter(myFilePath); PrintWriter myFile=new PrintWriter(resultFile); resultFile.close(); //用JXL向新建的文件中添加内容 OutputStream outf = new FileOutputStream(filePath); jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf); jxl.write.WritableSheet ws = wwb.createSheet("sheettest", 0); int i=0; int j=0; for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) { ws.addCell(new Label(k,0,rs.getMetaData().getColumnName(k+1))); } while(rs.next()){ out.println(rs.getMetaData().getColumnCount()); for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) { ws.addCell(new Label(k,j+i+1,rs.getString(k+1))); } i++; } wwb.write(); wwb.close(); }catch(Exception e){e.printStackTrace();} finally{ rs.close(); conn.close(); } response.sendRedirect("aaa.xls");
7天带你玩转Mysql
数据
库之
SQL语句
您观看课程学习后免费入群领取【超全Python资料包+17本学习电子书】 七年
SQL语句
编写经验。满满的干货! 在网上找了好多SQL
数据
库的教程,但你还会面临这样的问题:1. 自己写了SQL却不知道对不对。2. 在上线后发现原有的
数据
内容
SQL语句
执⾏结果没问题, 但是
数据
变化了以后SQL返回的结果就错误了。3. 稍微复杂⼀点的SQL就不知道该如何写了。4. 看不懂同⾏写的SQL是为什么。5. 不知道索引的原理。6. 不知道怎么加索引能够提⾼查询性能纵观全网的教程都只停留在概念解析的层面,没有深入剖析原理,所以看了那么多的教程,可还是不会写。本教程与其他教程不同带你深入了解原理,让你真正了解什么是
SQL语句
,让你懂得
SQL语句
的编写⽅法。不再为
SQL语句
而烦恼。真正做到面对任何问题能够判断出
SQL语句
是不是能够实现,该怎样实现。
C#开发经验技巧宝典
第18章 程序应用控制 483 18.1 提取信息 484 0795 判断驱动器类型并获取其属性 484 0796 如何得到本地机器的IP 484 0797 如何得到本地运行的EXE的路径 485 0798 得到计算机所有正在运行的进程 485 0799 获得Windows的启动模式 485 0800 获取鼠标的按钮个数及鼠标安装状态 485 0801 检测计算机是否存在网络连接 486 0802 如何判断计算机的联机状态 486 0803 获取计算机屏幕分辨率 486 0804 获取计算机当前登录的用户名称 486 18.2 系统控制 486 0805 远程关闭或重新启动计算机 486 0806 创建应用程序快捷方式 487 0807 启动Windows系统服务 488 0808 在C#应用程序中控制输入法 488 0809 打开“区域和语言选项”对话框并
指定
选项卡 489 0810 如何执行命令行命令? 489 0811 如何修改计算机的默认打印机 490 0812 如何实现行业软件系统注销功能 490 0813 如何将计算机设置为休眠状态 490 0814 在Windows系统中建立事件日志 491 0815 如何使PC喇叭发音 491 18.3 程序控制 491 0816 使用回车键控制鼠标焦点 491 0817 如何调用可执行应用程序 492 0818 TextBox上禁用鼠标右鍵 492 0819 如何实现屏幕截图 492 0820 如何将截取的图片保存为
指定
图片格式 493 0821 如何复制程序本身 493 0822 分段显示电话号码颜色 493 0823 软件版本号是如何组成的 493 0824 单击“关闭”按钮或按 Alt + F4 键时最小化窗口 494 0825 屏蔽RichTextBox控件 Ctrl + V 快捷键 495 18.4 其他 495 0826 将DataGridView控件中的
数据
导入
Excel
495 0827 无法获取自定义环境变量的值 496 0828 将组件放到COM+服务器上去 496 0829 调用非托管的DLL文件 497 0830 如何将GridView控件
数据
导入Word 497 0831 如何将GridView控件
数据
导入
Excel
497 0832 单片机如何实现在线调试 498 0833 单片机如何实现内存优化管理 498 0834 单片机实现文件系统管理 498 0835 杀死进程 498 0836 如何下载某网站上的图片资源 498 第19章 SQL查询相关技术 501 19.1 常用SQL查询技术 502 0837 如何在查询中正确使用单引号“’” 502 0838 SQL中SELECT语句的执行顺序 502 0839 在查询时查询
数据
为
指定
长度的
数据
502 0840 如何利用WHERE参数过滤
数据
503 0841 如何正确地理解和运用SQL中的判式 503 0842 如何正确地理解和使用SQL中的关键字 503 19.2 比较、逻辑运算符查询 504 0843 如何使用算术运算符号进行比较查询 504 0844 如何使用比较运算符号进行比较查询 504 0845 如何使用AND逻辑运算符查询 505 0846 如何使用OR逻辑运算符查询 506 0847 如何联合使用AND和OR运算符查询 506 0848 如何在查询中正确使用逻辑操作符 507 0849 利用通配符进行查询 507 19.3 SQL关键字查询 508 0850 如何使用ESCAPE关键字规定转义字符 508 0851 如何使用BETWEEN进行范围查询 508 0852 如何使用NOT BETWEEN进行范围查询 509 0853 如何使用GROUP BY子句查询 509 0854 如何使用HAVING语句过滤分组
数据
510 0855 如何使用ALL关键字查询 510 0856 如何使用CUBE关键字查询 511 19.4 表结构与性能 511 0857 检测信息是否存在 511 0858 @@CPU_BUSY获取CPU的工作时间 511 0859 如何获取磁盘读写次数 512 0860 获取SQL Server服务器名 512 0861 获取
数据
库标识号 512 0862 判断用户是否访问
数据
的权限 512 0863 显示
表中
列信息 512 0864 显示
表中
任意列名称 513 0865 提高SQL性能加快执行速度 513 0866 控制批处理内语句的执行 513 0867 执行查询但是显示列信息 514 0868 获取连接或试图连接的次数 514 0869 获取当前
数据
库的语言名 514 19.5 时间与谓词 514 0870 时间函数的使用 514 0871 设置
数据
库时间表显形式 515 0872 格式化日期显示格式 515 0873 如何正确理解SQL中的NULL值 516 0874 如何使用IsNull()函数来处理空值 516 0875 如何使用Nullif()函数来处理空值 516 0876 查询空值(NULL)的技巧 517 0877 利用关键字DISTINCT去除重复记录 517 0878 巧用TOP子句获取信息 518 0879 巧用CONTAINS谓词检索信息 518 0880 通过ISNULL替换信息 519 0881 比较COMPUTE和GROUP BY 519 0882 如何对
指定
时间段进行查询 519 0883 对某期间的
数据
进行查询的几种方法 519 0884 NOT与谓词进行组合条件的查询 520 19.6 聚合函数 520 0885 聚合函数SUM的使用 520 0886 聚合函数AVG的使用 521 0887 如何使用聚合函数MAX 521 0888 如何使用聚合函数MIN 522 0889 如何使用聚合函数COUNT 522 0890 如何使用聚合函数First或Last 523 19.7 子查询与连接查询 523 0891 union与连接之间的区别 523 0892 如何应用IN查询
表中
的记录信息 524 0893 使用一个单行的子查询来更新列 524 0894 使用IN引入子查询限定查询范围 524 0895 在UPDATE语句中应用子查询 525 0896 如何应用子查询 525 0897 EXISTS与子查询联合应用 525 0898 在FROM子句中的子查询 525 0899 在DELETE语句中应用子查询 526 0900 子查询与聚合函数的应用 526 0901 有效使用内连接 526 0902 如何使用LEFT OUTER JOIN查询 526 0903 如何使用RIGHT OUTER JOIN查询 527 0904 利用CASE语句查询结果 527 19.8 交叉表 528 0905 Access中利用TRASFORM分析
数据
528 0906 Access中利用TRASFORM动态分析
数据
529 0907 SQL Server实现静态交叉表 529 0908 SQL Server实现动态交叉表 531 19.9 常用
数据
操作 532 0909 如何对字符串进行查询 532 0910 如何进行单条
数据
的添加 533 0911 如何进行批量
数据
的添加 533 0912 如何对
数据
进行修改 534 0913 如何对
数据
进行删除 534 0914 对
数据
库
数据
进行局部删除 534 19.10 高级应用 535 0915 如何使用临时表 535 0916 如何查询
表中
的列名 535 0917 在查询中如何防止输入
指定
符串 536 0918 查询
指定
长度的
数据
536 0919 获取当前
数据
库的详细信息 537 0920 在查询过程中灵活定义与使用别名 538 19.11 视图、存储过程和触发器的使用 538 0921 如何正确认识视图 538 0922 如何获取
数据
库中的全部用户视图 539 0923 如何通过视图修改
数据
539 0924 如何正确理解存储过程 540 0925 如何获取
数据
库中的全部存储过程 540 0926 如何正确认识触发器 541 0927 Update触发器在系统日志中的应用 542 0928 触发器的嵌套使用 542 0929 获取
数据
库中的触发器 543 19.12 其他 544 0930 在查询程序中使用变量 544 0931 对查询结果进行排序 544 0932 批量获取结果集信息 545 0933 对查询结果生成表 545 0934 实现
数据
类型转换 546 0935 获取当前
数据
库的登录用户名 546 0936 如何正确理解
数据
库键字 546 0937 将结果转换为XML形式 547 0938 追加查询结果到已存在的表 547 0939 利用对多个
表中
的字段创建新记录集 547 0940 利用EXECUTE执行
SQL语句
548 第20章
数据
库技术 549 20.1 Access
数据
库的使用 550 0941 如何为Access
数据
库设置密码 550 0942 如何创建加密的Access
数据
库 550 0943 建立Access
数据
库连接 551 0944 与加密后的Access
数据
库建立连接 551 0945 如何提取Access
数据
库中的
数据
表名 551 0946 随机
读取
Access
数据
库记录 552 0947 将Access
数据
库导入到
Excel
中(ASP.NET) 552 0948 在.NET 2.0框架下动态创建Access
数据
库 553 0949 在.NET 2.0框架下动态创建Access
数据
表 553 0950 如何备份Access
数据
库 554 20.2 SQL
数据
库的使用 554 0951 建立SQL Server
数据
库连接 554 0952 如何使用ODBC访问SQL Server
数据
库 555 0953
读取
SQL Server
数据
表结构 556 0954 在C#中分离SQL Server
数据
库 557 0955 C#中附加SQL Server
数据
库 558 0956 C#中附加单文件SQL Server
数据
库 559 0957 备份SQL Server
数据
库 559 0958 还原SQL Server
数据
库 560 0959 开启SQL Server
数据
库服务 561 0960 断开SQL Server
数据
库服务 562 0961 如何判断SQL Server
数据
库连接状态 562 0962 获取连接SQL Server
数据
库的名称 563 0963 获取SQL Server的连接统计
数据
563 0964 如何调用SQL Server存储过程 563 0965 如何生成SQL
数据
库脚本 564 0966 SQL Server 2000无法安装的解决办法 565 20.3 其他 565 0967 如何判断记录是否为NULL 565 0968 建立Oracle
数据
库连接 566 0969 如何在
数据
表中
设置主键 566 0970 DataSet
读取
XML文件中
数据
作为
数据
源 567 0971 如何
读取
Fox的DBF文件 567 0972 通用方法实现
数据
增、删、改功能 567 0973 通用方法获取查询结果DataSet
数据
集 568 0974 同时查询多条
SQL语句
568 0975 如何判断是否查询到结果 568 0976 将图片以二进制格式存储到
数据
库中(asp.net) 569 0977 从DataReader对象
读取
数据
的技巧 569 0978 随机显示
数据
库记录 569 0979 通过DataTable获得
数据
表的主键 569 0980 将Access
数据
库转化为SQL Server
数据
库 570 0981 将SQL Server
数据
库转化为Access
数据
库 571 0982 如何避免
数据
库死锁现象 572 0983 如何调用带输入参数的存储过程 572 0984 如何获取存储过程返回的结果集 573 0985 取得
数据
表某个
单元格
的值 573 0986 在ASP.NET2.0下将
数据
绑定DropDownList 573 0987 在ADO.NET中实现
数据
库的事务处理 574 0988 将任意文件保存到
数据
库中 574 0989 将存储在
数据
库中的文件提取出来 575 0990 合并具有相同
数据
表结构的查询结果 575 0991 使用DataTable进行
数据
检索 575 0992 使用DataView对
数据
进行检索和排序 576 0993 使用DataSet建立DataTable明细表 576
通过java操作
excel
表格的工具类库jxl
jxl.jar jxl.jar 通过java操作
excel
表格的工具类库 支持
Excel
95-2000的所有版本 生成
Excel
2000标准格式 支持字体、数字、日期操作 能够修饰
单元格
属性 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理
Excel
文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 搭建环境 将下载后的文件解包,得到JXL.JAR,放入classpath,安装就完成了。如果包不能正常的加载,可以把你下载好的JXL.JAR包放入D:\JAVA\jre\lib\ext中(我的是JDK1.6)就OK了。我相信在配置TOMCAT时也需要把相关的三个包放到这里面。 基本操作 一、创建文件 拟生成一个名为“测试
数据
.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”)); //生成名为“第一页”的工作表,参数0表示这是第一页 WritableSheet sheet=book.createSheet(“第一页”,0); //在Label对象的构造子中指名
单元格
位置是第一列第一行(0,0) //以及
单元格
内容为test Label label=new Label(0,0,”test”); //将定义好的
单元格
添加到工作
表中
sheet.addCell(label); /*生成一个保存数字的
单元格
必须使用Number的完整包路径,否则有语法歧义
单元格
位置是第二列,第一行,值为789.123*/ jxl.write.Number number = new jxl.write.Number(1,0,789.123); sheet.addCell(number); //写入
数据
并关闭文件 book.write(); book.close(); }catch(Exception e) { System.out.println(e); } } } 编译执行后,会在当前位置产生一个
Excel
文件。 三、
读取
文件 以刚才我们创建的
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); } } } 程序执行结果:test 四、修改文件 利用j
Excel
API可以修改已有的
Excel
文件,修改
Excel
文件的时候,除了打开文件的方式不同之外,其他操作和创建
Excel
是一样的。下面的例子是在我们已经生成的
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”)); //打开一个文件的副本,并且
指定
数据
写回到原文件 WritableWorkbook book= Workbook.createWorkbook(new File(“测试.xls”),wb); //添加一个工作表 WritableSheet sheet=book.createSheet(“第二页”,1); sheet.addCell(new Label(0,0,”第二页的测试
数据
”)); book.write(); book.close(); }catch(Exception e) { System.out.println(e); } } } 高级操作 一、
数据
格式化 在
Excel
中不涉及复杂的
数据
类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。 1、字串格式化 字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的
单元格
时,使用如下语句,为方便叙述,我们为每一行命令加了编号: WritableFont font1= new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); 或//设置字体格式为
excel
支持的格式 WritableFont font3=new WritableFont(WritableFont.createFont("楷体 _GB2312"),12,WritableFont.NO_BOLD ); ① WritableCellFormat format1=new WritableCellFormat(font1); ② Label label=new Label(0,0,”data 4 test”,format1); ③ 其中①
指定
了字串格式:字体为TIMES,字号16,加粗显示。 WritableFont有非常丰富的构造子,供不同情况下使用,j
Excel
API的 java-doc中有详细列表,这里不再列出。 ②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以
指定
单元格
的各种属性,后面的
单元格
格式化中会有更多描述。 ③处使用了Label类的构造子,
指定
了字串被赋予那种格式。在WritableCellFormat类中,还有一个很重要的方法是
指定
数据
的对齐方式,比如针对我们上面的实例,可以
指定
: //把水平对齐方式
指定
为居中 format1.setAlignment(jxl.format.Alignment.CENTRE); //把垂直对齐方式
指定
为居中 format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); //设置自动换行 format1.setWrap(true); 二、
单元格
操作
Excel
中很重要的一部分是对
单元格
的操作,比如行高、列宽、
单元格
合并等,所幸j
Excel
API提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的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); 合并既可以是横向的,也可以是纵向的。合并后的
单元格
不能再次进行合并,否则会触发异常。 2、 行高和列宽 WritableSheet.setRowView(int i,int height); 作用是
指定
第i+1行的高度,比如: //将第一行的高度设为200 sheet.setRowView(0,200); WritableSheet.setColumnView(int i,int width); 作用是
指定
第i+1列的宽度,比如: //将第一列的宽度设为30 sheet.setColumnView(0,30); 五、操作图片 public static void write()throws Exception{ WritableWorkbook wwb=Workbook.createWorkbook(new File("c:/1.xls")); WritableSheet ws=wwb.createSheet("Test Sheet 1",0); File file=new File("C:\\jbproject\\PVS\\WebRoot\\weekhit\\1109496996281.png"); WritableImage image=new WritableImage(1, 4, 6, 18,file); ws.addImage(image); wwb.write(); wwb.close(); } 很简单和插入
单元格
的方式一样,不过就是参数多了些,WritableImage这个类继承了 Draw,上面只是他构造方法的一种,最后一个参数不用说了,前面四个参数的类型都是double,依次是 x, y, width, height,注意,这里的宽和高可不是图片的宽和高,而是图片所要占的单位格的个数,因为继承的Draw所以他的类型必须是double,具体里面怎么实现的我还没细看:)因为着急赶活,先完成功能,其他的以后有时间慢慢研究。以后会继续写出在使用中的心得给大家。 读: 读的时候是这样的一个思路,先用一个输入流(InputStream)得到
Excel
文件,然后用jxl中的Workbook得到工作薄,用Sheet从工作薄中得到工作表,用Cell得到工作
表中
得某个
单元格
。 InputStream->Workbook->Sheet->Cell,就得到了
excel
文件中的
单元格
代码: String path="c:\\
excel
.xls";//
Excel
文件URL InputStream is = new FileInputStream(path);//写入到FileInputStream jxl.Workbook wb = Workbook.getWorkbook(is); //得到工作薄 jxl.Sheet st = wb.getSheet(0);//得到工作薄中的第一个工作表 Cell cell=st.getCell(0,0);//得到工作表的第一个
单元格
,即A1 String content=cell.getContents();//getContents()将Cell中的字符转为字符串 wb.close();//关闭工作薄 is.close();//关闭输入流 我们可以通过Sheet的getCell(x,y)方法得到任意一个
单元格
,x,y和
excel
中的坐标对应. 例如A1对应(0,0),A2对应(0,1),D3对应(3,2).
Excel
中坐标从A,1开始,jxl中全部是从0开始. 还可以通过Sheet的getRows(),getColumns()方法得到行数列数,并用于循环控制,输出一个sheet中的所有内容. 写: 往
Excel
中写入内容主要是用jxl.write包中的类。 思路是这样的: OutputStream<-WritableWorkbook<-WritableSheet<-Label 这里面Label代表的是写入Sheet的Cell位置及内容。 代码: OutputStream os=new FileOutputStream("c:\\test.xls");//输出的
Excel
文件URL WritableWorkbook wwb = Workbook.createWorkbook(os);//创建可写工作薄 WritableSheet ws = wwb.createSheet("sheet1", 0);//创建可写工作表 Label labelCF=new Label(0, 0, "hello");//创建写入位置和内容 ws.addCell(labelCF);//将Label写入sheet中 Label的构造函数Label(int x, int y,String aString)xy意同读的时候的xy,aString是写入的内容. WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//设置写入字体 WritableCellFormat wcfF = new WritableCellFormat(wf);//设置CellFormat Label labelCF=new Label(0, 0, "hello");//创建写入位置,内容和格式 Label的另一构造函数Label(int c, int r, String cont, CellFormat st)可以对写入内容进行格式化,设置字体及其它的属性. 现在可以写了 wwb.write(); 写完后关闭 wwb.close(); 输出流也关闭吧 os.close; OK,只要把读和写结合起来,就可以在N个
Excel
中
读取
数据
写入你希望的
Excel
新
表中
,还是比较方便的。 下面是程序一例: 程序代码:sql = "select * from tablename"; rs = stmt.executeQuery(sql); //新建
Excel
文件 String filePath=request.getRealPath("aaa.xls"); File myFilePath=new File(filePath); if(!myFilePath.exists()) myFilePath.createNewFile(); FileWriter resultFile=new FileWriter(myFilePath); PrintWriter myFile=new PrintWriter(resultFile); resultFile.close(); //用JXL向新建的文件中添加内容 OutputStream outf = new FileOutputStream(filePath); jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf); jxl.write.WritableSheet ws = wwb.createSheet("sheettest", 0); int i=0; int j=0; for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) { ws.addCell(new Label(k,0,rs.getMetaData().getColumnName(k+1))); } while(rs.next()){ out.println(rs.getMetaData().getColumnCount()); for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) { ws.addCell(new Label(k,j+i+1,rs.getString(k+1))); } i++; } wwb.write(); wwb.close(); }catch(Exception e){e.printStackTrace();} finally{ rs.close(); conn.close(); } response.sendRedirect("aaa.xls");
VBA
2,462
社区成员
10,807
社区内容
发帖
与我相关
我的任务
VBA
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
复制链接
扫一扫
分享
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章