用java实现一个功能:以excel制作的一个任i意表格区域,将其规范化为第一行为列名往后各行为内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java实现一个功能:以excel制作的一个任i意表格区域,将其规范化为第一行为列名往后各行为内容相关的知识,希望对你有一定的参考价值。

用java实现一个功能:
以excel制作的一个任意表格区域,将其规范化为一个第一行为列名,往后各行为内容。
然后将此区域取名保存。

再从odbc处,用excel的数据库驱动连接上此文档。 .
以上为数据定义部分。
以下为编程部分:
用java语言,建立一个java项目,编程实现以jdbc方式访问该odbc定义的数据库连接。
将该表格的内容全部读取。
要求,当表格中有一列,该列的列名为mailaddress,值刻录的是邮箱地址。
以此列为必填项。

java在读出所有表格内容后,将每行的内容,依各行的邮箱地址,向该邮箱发送一封封邮件。
邮件内容即为该表格该行的内容。
邮件内容的展示要求是html语言实现的表格。

不清楚你说的一些细节问题,譬如什么是“再从odbc处,用excel的数据库驱动连接上此文档”。
不过,针对你说的大概要求,根据我的经验,结论如下:
这是一个简单的java项目,涉及到的技术有字符串的简单处理和数据库的操作等等。
我对用java直接操作execl数据没有经验,但是java可以把execl数据当做text数据进行操作,个人认为更简单。
1.搭建jdbc环境,测试连接数据库,具体连接方式,和需要的驱动,需要你自己去找,如果有什么问题,你可以再继续问我。
2.数据库可以连接并且访问,之后,编写能读取execl文件内容的java小程序。你可以选择用很多种方式读取数据。这个时候,不用急着把数据存入数据库。
3.根据execl文件的内容结构,数据类型的详细信息,确定数据库的表的定义。
4.在数据库中建立相应的表,编写向表中插入数据的java程序。
5.编写从表中读取信息的java程序。
5.编写发送邮件的java程序。
6.整合你编写好的程序,调试。
在这个过程中,如果你能自己动手查查api和网上的资料,熟悉常用数据库譬如mysql,sqlserver,oracle的连接和操作方式,还有语法的区别,那这个小项目的作用将是巨大的。有问题继续追问,祝你好运。
参考技术A 百度搜索 参考技术B 你不会是要我等手写个程序吧,虽不难但费时间,怎么也不能无私奉献吧追问

你就告诉我在方面查找资料就行了我自己尝试着写也学点知识 谢谢

追答

具体是哪方面不懂呢?百度如下内容:
1.excel 与odbc连接;
2.jdbc 与odbc连接
3.java 读取excel的内容;
4.java 邮件发送;
5.java 读取数据存如格式为html格式的文档
照以上搜索 完全可以解决你的问题

追问

在麻烦你一下能不能告诉我做这个项目的步骤 。我真是一点都不会。别人给了我一个月的时间,让我自己学习,看书找争取完成,但是我无从下手。只是了解JAVA而已。谢谢了

java+jxls利用excel模版进行导出

  大多时候会出现需要导出excel的功能,利用poi可以实现简单的导出,可以说poi的功能非常强大可以做到细节的定制化操作,但相对于在office操作excel,利用poi完全生成excel会显得非常复杂,细节代码会特别多。在这个时候我们可以事先利用offfice制定好一个模版文件,在利用jxls来通过模版文件来实现复杂excel的导出。

  模版的制作和一般excel的编写是一样的,在需要填充的网格利用{}来进行取出java中传进来的变量值,如图:

 

在java中:

InputStream is =getFileInputStream(templateFileName);//获取模板输入流
XLSTransformer transformer = new XLSTransformer();
HSSFWorkbook resultWorkbook =transformer.transformMultipleSheetsList(is,prints/*要打印的list*/, 
sheetNames/*sheet的名称list*/, "print"/*excel的bean名称*/, new HashMap(), 0);

  在excel中,jxls会将要打印的list通过我们定义的bean名称取出进行遍历,在源码中

public HSSFWorkbook transformMultipleSheetsList(InputStream is, List objects, List newSheetNames, String beanName, Map beanParams, int startSheetNum) throws ParsePropertyException {
        HSSFWorkbook hssfWorkbook = null;

        try {
            if (beanParams != null && ((Map)beanParams).containsKey(beanName)) {
                throw new IllegalArgumentException("Selected bean name \'" + beanName + "\' already exists in the bean map");
            }

            if (beanName == null) {
                throw new IllegalArgumentException("Bean name must not be null");
            }

            if (beanParams == null) {
                beanParams = new HashMap();
            }

            POIFSFileSystem fs = new POIFSFileSystem(is);
            hssfWorkbook = new HSSFWorkbook(fs);

            for(int sheetNo = 0; sheetNo < hssfWorkbook.getNumberOfSheets(); ++sheetNo) {
                String spreadsheetName = hssfWorkbook.getSheetName(sheetNo);
                if (!this.isSpreadsheetToRemove(spreadsheetName)) {
                    if (this.isSpreadsheetToRename(spreadsheetName)) {
                        hssfWorkbook.setSheetName(sheetNo, this.getSpreadsheetToReName(spreadsheetName));
                    }

                    HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(sheetNo);
                    if (startSheetNum == sheetNo && objects != null && !objects.isEmpty()) {
                        for(int i = 0; i < objects.size(); ++i) {
                            Object bean = objects.get(i);
                            String beanKey = beanName;
                            if (i != 0) {
                                beanKey = beanName + i;
                                HSSFSheet newSheet = hssfWorkbook.createSheet((String)newSheetNames.get(i));
                                Util.copySheets(newSheet, hssfSheet, beanName, beanKey);
                                Util.copyPageSetup(newSheet, hssfSheet);
                                Util.copyPrintSetup(newSheet, hssfSheet);
                            } else {
                                hssfWorkbook.setSheetName(sheetNo, (String)newSheetNames.get(i));
                            }

                            ((Map)beanParams).put(beanKey, bean);//在此次将我们传入的list通过map的形式放入beanParams
                        }
                    }
                } else {
                    hssfWorkbook.removeSheetAt(sheetNo);
                    --sheetNo;
                }
            }
        } catch (IOException var16) {
            var16.printStackTrace();
        }

        if (hssfWorkbook != null) {
            for(int i = 0; i < hssfWorkbook.getNumberOfSheets(); ++i) {
                Util.setPrintArea(hssfWorkbook, i);
            }
        }

        this.transformWorkbook(hssfWorkbook, (Map)beanParams);//通过模板和beanParams生产excel
        return hssfWorkbook;
    }
View Code

   在excel中通过beanParams的Map形式来进行取值,有点类似于freemarker语法,但不同于freemarker

  在此事例中,我定义了一个类(domain)来存放list,类的形式如下(即要打印的list的元素是以下类)

public class ExcelPrintDomain implements Serializable {
    private List lista = new ArrayList();
    private Object domaina;
  
    private ServletContext context;
    private int pageNo;
   

    public ExcelPrintDomain() {
    }

    public ExcelPrintDomain(ServletContext context) {
        this.context = context;
    }

    public void addDomain(Object obj) {
        this.domains.add(obj);
    }

    public void addLista(Object obj) {
        this.lista.add(obj);
    }

    public int getPageNo() {
        return this.pageNo;
    }

    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }

    public List getLista() {
        return this.lista;
    }

    public void setLista(List lista) {
        this.lista = lista;
    }

    public Object getDomaina() {
        return this.domaina;
    }

    public void setDomaina(Object domaina) {
        this.domaina = domaina;
    }
}
View Code

  所以在模板中${print.domaina.orgName}代表的是取出domain里面的domaina里面的key为orgName的value值,

  ${print.lista.ec01002}代表的是在遍历中取出domain中的lista包含的Map里面的key为ec01002的value值。

 

以上是关于用java实现一个功能:以excel制作的一个任i意表格区域,将其规范化为第一行为列名往后各行为内容的主要内容,如果未能解决你的问题,请参考以下文章

Java高级特性-注解:注解实现Excel导出功能

接了个变态需求:生成 Excel + PDF 导出,用 Java 怎么实现?

java用freemarker实现导出excel

java+jxls利用excel模版进行导出

java poi 生成excel 折线图能以列为参数吗

如何定义一个函数编写出99乘法表。?