通过FineReport电子表格进行简要介绍。
1、 描述
2、 在填报报表时,通过文件控件上传文件,可利用公式提取文件名、类型及大小信息。
3、 提取文件名:从指定路径中获取文件名称信息。
4、 获取文件类型信息,判断文件的具体格式。
5、 获取指定文件的大小信息。
6、 单文件上传时三个公式返回字符串,多文件上传则返回数组。
7、 获取文件名称的功能由filename实现。
8、 所示,新建一个模板,在B2单元格插入文件控件,随后在C2单元格输入公式=filename(B2),即可获取所上传文件的名称。
9、 若同时上传多个文件,filename将获取所有文件名,各名称间以逗号分隔,返回结果为数组类型。例如,上传A.xls和B.txt两个文件时,filename的返回值即为包含这两个文件名的数组。
10、 filetype用于识别文件的类型。
11、 file:用于文件控件或包含文件的单元格。若为单个文件,返回其类型字符串;若为多个文件,返回类型数组;若非文件类型,则返回错误信息。
12、 单文件
13、 在D2单元格输入=filetype(B2),设置文件控件为仅支持单文件上传,预览模板后点击控件上传一张jpg图片,实际效果所示。
14、 文件控件获取的上传文件类型为jpg,因仅上传单个文件,返回结果为字符串形式。
15、 多文件
16、 取消勾选文件控件的单文件上传限制,填写并预览模板后,点击文件控件并选择三个文件,实际效果所示。
17、 函数filename(B2)返回一个数组,数组中包含文件名相关信息;同样,filetype(B2)也返回数组类型的数据,其内容表示对应文件的类型。两个函数均以B2为输入参数,输出结果均为数组结构,便于后续对文件名和文件类型进行批量处理与分析。
18、 filesize(file) 用于获取文件大小,返回值单位为 KB。
19、 file:表示文件控件或包含文件的单元格。若为单个文件,返回对应的文件类型字符串;若为多个文件,返回文件类型组成的数组;若输入内容非文件类型,则返回错误提示信息。
20、 单文件上传时filesize返回字符串,多文件上传则返回数组,类似于filetype的处理方式。
21、 在E2单元格输入公式=filesize(B2),填写并预览模板,效果所示。
22、 问题说明
23、 如何将上传的文件保存至指定目录,并仅将文件名存入数据库?
24、 思路实现
25、 通过自定义函数将文件上传至指定路径,并在按钮的填报事件中提交数据至数据库,同时调用该函数完成操作。
26、 创建自定义函数
27、 Commit3.java源文件的代码内容如下所示:
28、 定义用于提交作业的文件路径变量,存储文件所在位置信息。
29、 }
30、 valueState的0、1、2、3分别代表默认值、新增行、数值变更和删除行。
31、 }
32、 创建新文件夹,将附件列表中指定索引位置的附件内容读取为字节数组,并写入该文件夹中。确保文件路径存在并具有写入权限,操作完成后释放相关资源,避免内存泄漏。
33、 }
34、 }
35、 }
36、 }
37、 }
38、 }
39、 检查文件是否存在,若存在则执行后续操作。
40、 删除指定的文件。
41、 }
42、 在当前目录创建一个名为FileName的文件。
43、 }
44、 }
45、 将源数据写入新创建的文件后,关闭输出流。
46、 }
47、 }
48、 }
49、 }
50、 }
51、 编写自定义函数
52、 将编译生成的Commit3.class和Commit3$$1.class文件复制到FineReport安装目录中WEB-INF下的classes文件夹内。由于Commit3.java位于com.fr.data包中,需在classes目录下创建对应的路径结构,即将这两个class文件存放于classes/com/fr/data/目录中,以确保类路径正确,系统能够正常加载该类及其内部类,避免运行时出现类找不到的错误。
53、 设定模板格式
54、 表单样式配置
55、 按图调整表格样式
56、 A1单元格设置为文件上传控件,控件名称为attach;B1单元格放置一个名为上传的按钮,点击后触发文件上传操作;C1单元格为文本框,通过公式filename(A1)获取并显示所选文件的名称;D1单元格用于填写文件上传的目标路径,该单元格控件设为不可见,用户无法直接查看或编辑。
57、 自定义函数调用与数据入库处理
58、 为B1按钮添加点击事件,选择提交入库,并按图示进行配置。
59、 完成设置后,点击提交事件按钮,进入自定义事件添加界面。点击+号,选择自定义事件类型,并从中选定comfrdatacommit3.class文件。随后,点击增加属性按钮,依次添加两个属性:第一个属性名称为attach,值设为公式A1;第二个属性名称为filePath,值对应单元格D1的内容。这两个属性的命名需与commit3.java中所定义的文件路径变量保持一致。配置完成后,整体效果所示。
60、 由于attach在Commit3.java中被定义为Object类型,其属性值仅支持直接输入公式F(x)=A1,无法通过选择单元格方式赋值。而filePath在Commit3.java中定义为SubmitJobValue类型,因此其属性值必须通过选取具体单元格的方式进行设置,所示操作,不允许手动输入公式内容。两种字段因数据类型不同,在赋值时需遵循各自的规定方式,确保符合程序设计要求,避免类型不匹配导致的运行错误。
评论
更多评论