怎么才能把数据库字段值动态填充到Excel单元格?

怎么才能把数据库字段值动态填充到Excel单元格?,第1张

网上搜:使用poi *** 作Excel的几点注意事项

首先说说现在Java编辑Excel文件的两大开源工具:jakarta poi和JavaExcelAPI(简称JXL),这两套工具我都试用了一这段时间,感觉各有优劣吧。poi在某些细节有些小Bug并且不支持写入图片,对中文的支持不行;JXL就惨了,除了支持写入图片外,我暂时看不到它比POI好的地方,我碰到的主要的问题就是对公式支持不是很好,很多带有公式的Excel文件用JXL打开后,公式就丢失了(比如now(),today()),在网上看到其他大虾评论说JXL写入公式也有问题,另外,JXL *** 作Excel文件的效率比POI低一点。

poi和jxl都是直接分析excel文件格式进行 *** 作的,最大的缺点是对excel的各种特性和格式不能全面支持,也总是不支持最新版的excel(总有一个研发滞后期)。

还有使用Jacob的方案,jacob使用的是com技术,对excel进行ole自动化调用,缺点是服务器端必须安装excel,而且web的并发访问经常会令自动化隐藏运行的excel进程死掉。unix等 *** 作系统无法安装ms office。

现在有一个最佳的解决方案,就是采用SOAExcel技术。SOAExcel是SOAOffice中的一个专门负责Excel读写的纯Java组件。

由于是纯Java组件,所以服务器端不需安装office。 SOAExcel含有Sheet、Cell等类似Excel的简化接口,调用简单。SOAExcel不但能能把数据库字段值动态填充到Excel单元格,还能把用户输入的单元格的值提出给开发者保存到数据库。

SOAExcel能够在客户端浏览器的网页里通过SOAOffice直接显示生成的Excel,用户不必下载再打开观看内容。由于SOAExcel是自动化客户端安装的excel进行工作的,所以不存在poi和jxl对excel版本格式支持的问题,也不存在jacob服务器端自动化问题。

举个例子:

SOAOfficeX.ExcelResponse SOAExcel = new SOAOfficeX.ExcelResponse()

SOAOfficeX.ExcelResSheet sheet1 = SOAExcel.openSheet("Sheet1")// 打开一个Sheet

sheet1.openCell("D"+String.valueOf(8+i)).setValue(rs.getString("Count"))//循环填充数据。

SOAOfficeX.SOAOfficeCtrl SOACtrl = new SOAOfficeX.SOAOfficeCtrl(response)

SOACtrl.assign(SOAExcel)// 绑定数据

// 打开模板并生成最终的excel报表

SOACtrl.webOpen("doc/test.xls", 1, UserName, "Excel.Sheet")

Excel文件不但动态填充生成,而且在网页里直接显示生成的Excel给终端用户,由于使用了1打开模式,Excel是只读显示的。

        private void button2_Click(object sender, EventArgs e)//导出到excel

        {

            IWorkbook workbook = new HSSFWorkbook() //在内存里创建工作簿。在excel里一个excel文件就是一个工作簿           

            ISheet sheet = workbook.CreateSheet("掉毛表")//在工作簿workbook里创建表,就是打开excel后看到的sheet1、sheet2.。。

            //下面给表sheet创建行、单元格并赋值。

            for (int i = 0 i < dataGridView1.Rows.Count i++)//dataGridView1有多少行,相应就给sheet创建多少行

            {

                IRow r = sheet.CreateRow(i)//i表示创建的是第几行

                for (int j = 0 j < dataGridView1.Columns.Count j++)//dataGridView1有多少列,相应就给sheet创建多少个单元格

                {

                    ICell c = r.CreateCell(j)//给r这个行创建第j个单元格

                    c.SetCellValue(dataGridView1.Rows[i].Cells[j].ToString())//给c这个单元格设置显示的内容,为datagridview1的第i行第j格

                }

            }

            

            using (FileStream fs = File.Create(@"c:\\2.xls"))//创建文件流对象fs,这个fs与指定路径挂钩。

            {

                workbook.Write(fs)//把workbook写入到文件流fs里。

            }

        }

参考一下吧,是用Npoi *** 作的,你需要下载Npoi.dll然后在项目里添加对此dll的引用。

var chart = eval('[ { "counts":3, "region":"东城区" }, { "counts":2, "region":"朝阳区" }, { "counts":5, "region":"海淀区" } ]')

var length = chart.length

var arrays = new Array()

for(var i = 0l i < length i++){

    arrays[i] = {

        value:chart['counts'][i],

        name:chart['region'][i]

    }

}

data:arrays

纯手打,你试试


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/sjk/6794389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存