posts - 15, comments - 20, trackbacks - 0, articles - 6
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2010年4月6日

       刚开始使用new HSSFWorkbook(new FileInputStream(excelFile))来读取Workbook,对Excel2003以前(包括2003)的版本没有问题,但读取Excel2007时发生如下异常:
org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

        该错误意思是说,文件中的数据是用Office2007+XML保存的,而现在却调用OLE2 Office文档处理,应该使用POI不同的部分来处理这些数据,比如使用XSSF来代替HSSF。

        于是按提示使用XSSF代替HSSF,用new XSSFWorkbook(excelFile)来读取Workbook,对Excel2007没有问题了,可是在读取Excel2003以前(包括2003)的版本时却发生了如下新异常(真是太悲剧了):
org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file: '*.xls'
        该错误是说,操作无效,不能打开指定的xls文件。

        下载POI的源码后进行单步调试,发现刚开始的时候还是对的,但到ZipFile类后就找不到文件了,到网上查了下,原来是XSSF不能读取Excel2003以前(包括2003)的版本,这样的话,就需要在读取前判断文件是2003前的版本还是2007的版本,然后对应调用HSSF或XSSF来读取。
        这是初步的想法,但这种做法比较麻烦,看了下API,发现XSSF和HSSF虽然在不同的包里,但却引用了同一接口Workbook,于是想到了这样的读取方法:
        Workbook book = null;
        try {
            book = new XSSFWorkbook(excelFile);
        } catch (Exception ex) {
            book = new HSSFWorkbook(new FileInputStream(excelFile));
        }
        在各版本的Excel中测试,没有发生异常,问题解决。

posted @ 2011-03-16 16:17 spinage 阅读(12682) | 评论 (1)编辑 收藏

   最近遇到了request.getRemoteAddr()获取的值为0:0:0:0:0:0:0:1,这是为什么呢,照道理讲,应该是127.0.0.1才对,为什么这个获取的值变成了ipv6了呢,而且我发现这种情况只有在服务器和客户端都在同一台电脑上才会出现(例如用localhost访问的时候才会出现,用127.0.0.1不会出现),后来上网查了查原因,原来是/etc/hosts这个东西作怪(在windows上应该是C:\Windows\system32\drivers\etc\ hosts这个文件),只需要注释掉文件中的 # ::1 localhost 这一行即可解决问题。另外localhost这个文件很有用,这里你可以添加自己的条目,例如添加 192.168.0.111 buyer.com这样子,在浏览器中原来只能使用192.168.0.111来访问的,并可以使用 buyer.com来进行替换。

posted @ 2011-03-16 16:08 spinage 阅读(934) | 评论 (1)编辑 收藏

假设当前已执行:select * from tab;

   (a)ppend 添加文本到缓冲区当前行尾

       例: SQL>a  order by tname

  结果:select * from tab order by tname;

  (注:a后面跟2个空格)

  (c)hange/old/new 在当前行用新的文本替换旧的文本

  例:SQL>c/*/tname

  结果:select tname from tab;

  (c)hange/text 从当前行删除文本

  例:SQL>c/tab

  结果:select tname from ;

   del 删除当前行

    del n 删除第n行 

  (i)nput 文本 在当前行之后添加一行 

  (l)ist 显示缓冲区中所有行 

  (l)ist n 显示缓冲区中第 n 行 

  (l)ist m n 显示缓冲区中 m 到 n 行

  (r)un 执行当前缓冲区的命令

  /  执行当前缓冲区的命令

  @文件名 运行调入内存的sql文件

     例:SQL> edit s<回车>

  如果当前目录下不存在s.sql文件,则系统自动生成s.sql文件,

  在其中输入“select * from tab;”,存盘退出。

  SQL> @s<回车>

    系统会自动查询当前用户下的所有表、视图、同义词。

      @@文件名 在.sql文件中调用另一个.sql文件时使用

      例:SQL>edit test<回车>

           在其中输入"@s",存盘退出。(这里s为上例中创建的sql文件)

           SQL>@@test<回车>

           结果就是执行了文件s.sql中的语法:自动查询当前用户下的所有表、视图、同义词。

  save 文件名             将缓冲区的命令以文件方式存盘,缺省文件扩展名为.sql

  get 文件名           调入存盘的sql文件

  start 文件名         运行调入内存的sql文件

  spool 文件名        把这之后的各种操作及执行结果“假脱机”即存盘到磁盘文件上,默认文件扩展名为.lst

    spool                 显示当前的“假脱机”状态

    spool off            停止输出

  例:

  SQL> spool a

  SQL> spool

  正假脱机到 A.LST

  SQL> spool off

  SQL> spool

  当前无假脱机

  exit             退出SQL*PLUS

  desc 表名     显示表的结构

  show user     显示当前连接用户

  show error    显示错误

  show all       显示所有68个系统变量值

  edit                打开默认编辑器,Windows系统中默认是notepad.exe,把缓冲区中最后一条SQL语句调入afiedt.buf文件中进行编辑

    edit 文件名   把当前目录中指定的.sql文件调入编辑器进行编辑

   clear screen   清空当前屏幕显示

posted @ 2010-04-06 16:04 spinage 阅读(315) | 评论 (0)编辑 收藏

关于在MyEclipseWEB工程里面的JS/JSP经常会有语法错误提示,这是由于MyEclipse对其语法要求相当严格所造成的,而这些文件本身是可以运行并没有什么错误的,在你实际应用部署中并无影响.

此问题解决办法有两种:

一、就是您不用去管它提示,直接部署到你的WEB容器上运行是可以的,但此方法欠妥当。

二、选择你的工程右击菜单——>点击MyEclipse菜单项的Exclude From Validation,如果你的工程里还有其它需要它检验其合法性建议可以针对某一文件夹或具体文件进行此项操作,这样可以只针对WEB工程里的某一个文件夹里面的JSP/JS文件来进行验证排除,这样就不会对这些被排除的文件或文件夹进行验证了,不过再你打开这些文件时,文件里面是有错误提示的,但工程是不会出现语法错误提示的。这样不仅解决了工程总提示语法信息错误的烦恼,对于一些确实存在问题的文件也可以查看其错误问题所在,可谓一举两得。

另外还可以通过使用Remove All Validation Markers此菜单项进移除所有的验证语法错误提示信息。

posted @ 2010-04-06 13:29 spinage 阅读(2345) | 评论 (2)编辑 收藏