List表格
英语单词表格

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
单词
词义
WORD LIST
第一遍
背诵时间及检查日期记录
1h
1天
2天
6天
14天 30天
序号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
序号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
单词
词义
WORD LIST
第一遍
背诵时间及检查日期记录
1h
1天
2天
6天
14天 30天
单词
词义
WORD LIST
第一遍
背诵时间及检查日期记录
1h
1天
2天
6天
14天 30天
序号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
单词
词义
WORD LIST
第一遍
背诵ቤተ መጻሕፍቲ ባይዱ间及检查日期记录
1h
1天
2天
6天
14天 30天
单词
词义
WORD LIST
第一遍
背诵时间及检查日期记录
1h
1天
2天
6天
14天 30天
序号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
collutil list转换

collutil list转换Collutil是一个非常实用的工具,它专门用来进行Excel表格等数据的转换和处理,其中最为常用的就是list转换了。
下面我们来分步骤介绍一下list转换的过程。
1. 第一步,打开Collutil工具并选择合适的转换类型打开Collutil后,我们需要选择一个适合的类型来进行转换。
在菜单栏里,我们可以找到“转换”选项,点击之后,会弹出多个转换类型选择框,包括list转换、表格转换、SQL转换和JSON转换等。
2. 第二步,导入要转换的文档并选择数据在选择list转换之后,我们需要导入要进行转换的文档。
点击“导入文件”按钮,选择要转换的文档,然后点击“打开”按钮即可将文档导入Collutil中。
接下来,我们需要勾选要转换的数据并进行数据选择。
3. 第三步,选择转换模板并进行转换在进行list转换之前,我们需要先设置转换模板,也就是规定要将数据转换成哪种格式。
在Collutil中,我们可以选择多种不同的模板,例如HTML表格、XML格式、JSON格式、CSV格式等。
选择完毕后,我们就可以开始转换了。
点击“转换”按钮即可进行转换,并将结果导出到指定的文件中。
4. 第四步,编辑转化后的文档在完成list转换之后,我们可以对转换后的文档进行编辑,以期达到更好的效果。
在Collutil工具中,我们可以对转换后的文档进行一系列的编辑操作,包括修改格式、添加样式、调整布局等。
总之,Collutil的list转换功能非常实用,是众多数据处理工具中的佼佼者。
在实际工作中,我们可以通过使用Collutil,将Excel表格等数据进行高效的转换和处理,提高工作效率,并为我们的工作带来很多的便利。
学生选择英文名表格

Sam萨姆
Kitty吉蒂
Denny丹尼
Lena莉娜
Austin奥斯汀
Lydia莉蒂亚
Roger罗杰
注意:1.选好之后,请将你的名字用中文写在所选英文名的后面;
2.如果你已经有英文名,请将你的英文名和中文名一并写在末尾空格处;
3.如果你有更喜欢的名字,请将你Biblioteka 英文名和中文名一并写在末尾空格处。
Jenny珍妮
Jerry杰瑞
Jessie婕西
Jimmy吉米
Joan琼
John约翰
Joy乔伊
Joseph约瑟夫
Julia朱丽亚
Justin贾斯汀
Katherine凯瑟琳
Lawrence劳伦斯
Kristin克莉丝汀
Martin马丁
Linda琳达
Mike麦克
Lisa丽莎
Nicholas尼古拉斯
Lucy露西
English name list(Class 4)
Girl names
Boy names
English names
Your names
Englishnames
Your names
Alice爱丽丝
Aaron亚伦
Amanda阿曼达
Abraham亚伯拉罕
Amy艾米
Alexander亚历山大
Angela安琪拉
Yourteacher: Sharon
Oliver奥利弗
Maggie玛姬
Paul保罗
Maria玛丽亚
Peter彼得
Mary玛丽
Richard理查德
Merry梅莉
Robert罗伯特
Nancy南茜
Robinson罗宾逊
医院健康体检表格

分类:
市
医院
The Hospital of ***
健康体检中心
Physicalexam in ati oncenter
健康体检表
Health Checkup List
单位:姓名:
电话:
体检者基本情况
姓名
性别
年龄
民族
籍贯
职业
职务
婚姻状况
地址
宅电
手机
联系人
电话
吸烟史:无
偶尔有(
支/日*
妇 科 检 查 与 病 理
外阴:正常白斑
阴道
正常膨出
前壁
子宫:正常肿瘤
后壁
附件:正
常
包
左
宫颈
正常
糜烂:i° n°旷
块
右
肥大纳氏囊肿息肉
宫颈涂片:
TCT
宫颈病理涂片编号:
结论:
医师签字:
经颅多普
勒检查
(TCD)
结果(详见报告单:)
医师签字:
肝脏
胆囊
B
超检
查
脾脏
肾脏
腺脏
前列腺(男)
子宫(女)
附件(女)
异常脏器描述:
结论:
医师签字:
心脏彩色超声检查(详见报告单):
医师签字:
骨 超 声 检 查
骨强度综合评价:
结论:
医师签字:
检
X
线
胸部X线透视检查
查
胸部X线拍片检查(正位):(见报告)
颈椎X光拍片检查:(见报告)
腰椎X光拍片检查:(见报告)医师签字:
红外乳腺检查:见报告
乳腺高频钼靶拍片检查:见报告
40list艾宾浩斯英语单词记忆表格

b) 复习一个list所需的时间为20分钟以内
c) 当天的list最好在中午之前背完,大约12小时之后(最好睡觉前)复习当天所背的list
d) 在其后的1,2,4,7,15天后分别复习当日所背的list
4. 注意事项:
b) 按上面方法背完1~6页(大约在30分钟),回到第1页开始复习(两三分钟)
c) 按上面同样方法背完7~12页,一个list结束
d) 相当于每个list被分为12个小的单元,每个小的单元自成一个复习系统;每6个小单元组成一个大单大单元各自成为一个复习系统。
背一个list总共需要一小时左右的时间。
方法:
过程:
一个list所需的时间为20分钟以内
的list最好在中午之前背完,大约12小时之后(最好睡觉前)复习当天所背的list 后的1,2,4,7,15天后分别复习当日所背的list
事项:
面方法背完1~6页(大约在30分钟),回到第1页开始复习(两三分钟)
面同样方法背完7~12页,一个list结束
于每个list被分为12个小的单元,每个小的单元自成一个复习系统;每6个小单元组成一个大单元,2个自成为一个复习系统。
背一个list总共需要一小时左右的时间。
过程:
事项:。
艾宾浩斯遗忘曲线表格

复习周期序号学习日期学习内容1天2天4天7天15天31天36天41天1 12 2 13 3 24 4 3 15 5 4 26 6 5 37 7 6 4 18 8 7 5 29 9 8 6 310 10 9 7 411 11 10 8 512 12 11 9 613 13 12 10 714 14 13 11 815 15 14 12 9 116 16 15 13 10 217 17 16 14 11 318 18 17 15 12 419 19 18 16 13 520 20 19 17 14 621 21 20 18 15 722 22 21 19 16 823 23 22 20 17 924 24 23 21 18 1025 25 24 22 19 1126 26 25 23 20 1227 27 26 24 21 1328 28 27 25 22 1429 29 28 26 23 1530 30 29 27 24 1631 31 30 28 25 17 132 32 31 29 26 18 233 33 32 30 27 19 334 34 33 31 28 20 435 35 34 32 29 21 536 36 35 33 30 22 6 137 37 36 34 31 23 7 238 38 37 35 32 24 8 339 39 38 36 33 25 9 440 40 39 37 34 26 10 5一般记住后,在5分钟后重复一遍,20分钟后再重复一遍,1小时后,12小时后,1天后,2天后,5天后,8天后,14天后就会记得很牢。
人的记忆周期分为短期记忆和长期记忆两种。
第一个记忆周期是 5分钟第二个记忆周期是30分钟第三个记忆周期是12小时这三个记忆周期属于短期记忆的范畴。
下面是几个比较重要的周期。
第四个记忆周期是 1天第五个记忆周期是 2天第六个记忆周期是 4天第七个记忆周期是 7天第八个记忆周期是15天以上的8个周期应用于背词法,作为一个大的背词的循环的8个复习点,可以最大程度的提高背单词的效率艾宾浩斯遗忘曲线理论:初次记忆后的当天及第2天,第5天,第10天,第30天,第60天,第100天这七天中,处于所谓遗忘临界日,如果及时复习,则会取得巩固记忆的效果,七次复习后,基本永记不忘,过早或者过频繁复习都是没有必要的一、复习点的确定(根据艾宾浩斯记忆曲线制定):1.第一个记忆周期:5分钟2.第二个记忆周期:30分钟3.第三个记忆周期:12小时4.第四个记忆周期:1天5.第五个记忆周期:2天6.第六个记忆周期:4天7.第七个记忆周期:7天8.第八个记忆周期:15天二、背诵方法:1.初记单词时需要记忆的内容:a)单词外观,b)单词的中文释义,c)单词的记忆法2.每个list的具体背诵过程(每个list按12页,每页10个单词计):a) 背完一页(大约5分钟),立即返回该页第一个单词开始复习(大约几十秒)b) 按上面方法背完1~6页(大约在30分钟),回到第1页开始复习(两三分钟)c) 按上面同样方法背完7~12页,一个list结束d) 相当于每个list被分为12个小的单元,每个小的单元自成一个复习系统;每6个小单元组成一个大单元,2个大单元各自成为一个复习系统。
to,do,list,excel模板

竭诚为您提供优质文档/双击可除to,do,list,excel模板篇一:如何将excel多份表格叠加在一张表中如何将excel多份表格叠加在一张表中首先,把这些表的工作簿(可以是多个工作簿)放在一个新建立的文件夹里;第二,在这个新建立的文件夹里再新建一个excel表格文件,如《合并》;第三,打开这个《合并》工作簿,在左下角sheet1标签处右键“查看代码”,然后把下面代码复制进去;然后点运行“运行子过程”,保存,关闭退出,就完成了多张表格数据的叠加;第四,整理该份叠加合并的表格。
sub合并当前目录下所有工作簿的全部工作表()dimmypath,myname,awbnamedimwbasworkbook,wbnasstringdimgaslongdimnumaslongdimboxasstringapplication.screenupdating=Falsemypath=activeworkbook.pathmyname=dir(mypath//是否对header进行冻结,让表头随着滚动条而滚动。
默认:falsesetheader(string[])方法是添加要显示的内容的标题的,就好比是table标题(thead).最后调用write(list,"F:/workspace/testFolder/workorder.xls") ;//第一个参数:数据集合(list servlet中则是:request.getsession().getservletcontext().getRealpat h("/")+"项目中的文件夹名字/workorder.xls";最后返回true和false,表示成功与否。
下面是代码部分packagecom.zhb.dbhelper;importjava.io.File;importjava.text.simpledateFormat;importjava.util.arraylist;importjava.util.date;importjava.util.list;importjxl.workbook;importjxl.format.underlinestyle;bel;importjxl.write.writablecellFormat;importjxl.write.writableFont;importjxl.write.writablesheet;importjxl.write.writableworkbook;importjxl.write.writeexception;/***传入各个属性并将数据写入excel*@author*通用报表格式*修改时间:20xx-07-11*修改内容:修改条件显示的格式,由原来的一行显示两个条件信息修改为一行显示一个条件信息,使报表看起来更直观,更简洁**/publicclassdoexcelhelper{privatestringtitle="报表";//标题privatestring[]header;//表头privatestring[]f_name;//条件名称privatestring[]f_value;//条件值privatebooleanisVerticalFreeze=false;//是否需要对行进行窗口冻结(默认不冻结)/***main方法*@paramargs*/listlist=newarraylist();list.add(newstring[]{"20xx-05-12","user1","user1登入了系统"});list.add(newstring[]{"20xx-05-13","user2","user 2登入了系统"});list.add(newstring[]{"20xx-05-14","user3","user 3登入了系统"});doexcelhelperdeh=newdoexcelhelper();deh.settitle("log日志");//添加报表标题string[]title={"操作时间","操作人员","操作内容"};deh.setheader(title);//添加报表的查询字段名称string[]fname={"开始时间","结束时间","操作用户"};deh.setF_name(fname);//没有查询字段则直接赋值null//添加报表的查询字段值string[]fvalue={"20xx-01-03","20xx-01-11","admin"," 20xx-05-06"};deh.setF_value(fvalue);//没有查询字段则直接赋值nulldeh.setisVerticalFreeze(true);//是否对header进行冻结,让表头随着滚动条而滚动。
C#listview展示表格格式

C#listview展⽰表格格式 有时候我们需要展⽰表格格式的数据,⾸先想到的是⽤datagridview控件,⽐如更改datagridview某⼀⾏的数据,这样操作起来就⽐较⿇烦,⽽listview属于轻量级,刷新和更改相对来说效率⽐较⾼。
⾸先展⽰最终结果:实现步骤:1.在设计⾥创建listview控件。
2.编辑列,可根据⾃⼰需求更改Name、Text、TextAlign、Width等。
3.设置View属性为 Details(细节),此时即可以显⽰列名4.设置GridLines为True显⽰表格线,设置FullRowSelect为True单击某个单元格选中⼀⾏。
最后结果如下:关键部分代码:private void Form4_Load(object sender, EventArgs e){string epc = "E20001234567890123456789";string dateTime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff");string antPort = "1";string clientIp = "10.10.10.80";bool findFlag = false; //默认为当前epc不存在列表中int itemIdx = 0; //listview索引foreach (KeyValuePair<int, string> item in dicInventoryData){if (item.Value.Contains(epc)){findFlag = true;itemIdx = item.Key;}}if (findFlag) //存在,更新数据{// 更新次数listInventoryData.Items[itemIdx].SubItems[4].Text = Int32.Parse(listInventoryData.Items[itemIdx].SubItems[4].Text) + 1 + "";//更新时间listInventoryData.Items[itemIdx].SubItems[5].Text = dateTime;// 取天线信息string strAntennaPorts = listInventoryData.Items[itemIdx].SubItems[3].Text;if (!strAntennaPorts.Contains(antPort)){// 更新天线信息strAntennaPorts += "," + antPort;listInventoryData.Items[itemIdx].SubItems[3].Text = strAntennaPorts;}}else//不存在,添加数据{ListViewItem item = new ListViewItem();//序号item.Text = (listInventoryData.Items.Count + 1) + "";//客户端item.SubItems.Add(clientIp);//epcitem.SubItems.Add(epc);//天线号item.SubItems.Add(antPort);// 次数item.SubItems.Add("1");//时间item.SubItems.Add(dateTime);listInventoryData.BeginUpdate();listInventoryData.Items.Add(item);listInventoryData.EndUpdate();// 添加到列表dicInventoryData.Add((int)imparityCount, epc);// 标签个数加1imparityCount++;}}常⽤属性: 1.HeaderStyle - “详细信息”视图中列标头的样式。
基于Element封装一个表格组件tableList的使用方法

基于Element封装⼀个表格组件tableList的使⽤⽅法我们项⽬中使⽤的表格⼀般都⽐较类似,如果不进⾏封装的话,那么每个页⾯都可能有⼀些类似的代码。
不仅浪费时间,⽽且由于开发⼈员不同的开发习惯。
后期维护⼈员需要花费⼀点时间去看每个⼈的代码。
所以我直接将表格做⼀个⼆次封装,只要⼀个⼈去维护这份代码即可。
下⾯是我封装的内容内容:1、⽀持直接传⼊后台请求地址渲染列表,且参数修改之后⾃动刷新2、⽀持⾃定义每⼀列的显⽰3、⽀持根据内容⾃动撑开列宽4、⽀持动态筛选表头5、⽀持分页6、防抖7、列权限...更多请⾃⾏尝试以下是tableList 组件的代码<template><!--刷新按钮和筛选列的多选框 layout中要有 control 才显⽰,默认显⽰--><div class="table"><div class="table-control" v-if="layoutKey.control"><div class="table-control-title" @click="reload"><i class="el-icon-refresh"></i></div><el-dropdown class="table-control-title"><span class="el-dropdown-link"><i class="el-icon-s-operation table-control-icon"></i></span><el-dropdown-menu slot="dropdown" class="table-control-checkbox"><el-checkbox-group v-model="headItems" @change="changeChecked"><el-checkbox class="table-control-checkbox-item"v-for="(item,index) in allColumn":label="item":key="index">{{item}}</el-checkbox></el-checkbox-group></el-dropdown-menu></el-dropdown></div><!--列表主体--><el-table class="table" style="width: 100%"ref="tableList":data="tableData":defaultSort.async="defaultSort"v-bind="$attrs"v-on="$listeners"@selectionChange="selectionChange"@sort-change="sortChange"><ex-table-column v-if="layoutKey.expand" type="expand" fixed><slot name="expand" :data="props" slot-scope="props"/></ex-table-column><ex-table-column v-if="layoutKey.checkBox" fixed type="selection" :width="62":selectable="selectable"/><ex-table-column v-if="layoutKey.index" type="index" label="序号" width="60"/><ex-table-column v-for="(column,index) in activeColumn" :key="index":prop="column.field":column-key="column.field" :label="column.title" :fixed="column.fixed":sortable="column.sort" :selectable="column.selectable":show-overflow-tooltip="column.tooltip":autoFit='true' :width="column.width":fitByClass="autoWidth(column.width)":minWidth="column.minWidth || defaultWidth"><slot :name="column.field" :data="scope.row" :field="column.field" :content="column.field":index="index" slot-scope="scope"><div>{{$utils.nvl(scope.row[column.field],'--')}}</div></slot></ex-table-column></el-table><!--分页控件,layout中要有 control 才显⽰,默认显⽰--><el-pagination background small class="table-pagination":current-page.sync="page.pageNo":page-sizes="page.list":page-size="page.pageSize":layout="yout" :total="page.total"@current-change="handleCurrentChange"@size-change="handleSizeChange" v-if="layoutKey.page"/></div></template><script>import debounce from 'lodash/debounce';import ExTableColumn from './ExTableColumn';export default {components: { ExTableColumn },// 提供出来给其他组件调⽤,具体⽤法参考 vue 官⽅⽤法provide() {return {tableList: this,};},props: {// 默认的表格⼤⼩defaultWidth: {type: Number,required: false,default: 100,},// 显⽰的控件,⽬前就page,control 两个可选,可根据需求⾃⾏扩展layout: {default: 'page,control',},// 多选时返回的key,默认idcheckKey: {type: [Number, String],default: () => 'id',},// 请求参数,必填req: {type: Object,required: true,default: () => ({url: undefined,type: 'post',params: {query: {},},pageNo: 1,pageSize: 1,}),},// 默认排序,参考 elementUI table ⽤法defaultSort: {type: [String, Object],required: false,},// 列表显⽰的列// {title :必填 String,显⽰的列名field :必填 String ,列中的keywidth :选填,String 列宽,单位像素,fixed :选填,String 是否固定的列,可选 right, leftsort :选填,Boolean 是否可排序expend:选填,Boolean 是否可展开,配置slot:expand 显⽰展开内容 limit : 选填,Boolean 权限控制,false 则不显⽰}columns: {type: Array,required: true,default: () => [{ title: '操作', field: 'ctrl', width: '60', fixed: 'right' }],},// 这⼀⾏的 CheckBox 是否可以勾选,⽤法参考elementUI table⽤法 selectable: {type: Function,default: () => true,},// 其他table参数,都会传给table},data() {return {layoutKey: {},page: {list: [5, 10, 20, 50, 100],total: null,pageSize: 10,pageNo: 1,layout: 'total,sizes,prev,pager,next,jumper',},tableData: [],sort: '',checkRows: [],checkKeys: [],headItems: [],allColumn: [],activeColumn: [],};},methods: {sortChange({ prop, order }) {this.sort = `${prop} ${order === 'descending' ? 'desc' : 'asc'}`;this.refresh();},selectionChange(selection) {this.checkRows = selection;this.checkKeys = [];selection.map((row) => {this.checkKeys.push(row[this.checkKey]);return true;});this.$emit('selectionChange', selection);},/** **************************method*********************************** */// 分页async handleCurrentChange(currentPage) {this.page.pageNo = currentPage;this.$emit('handleCurrentChange', currentPage);await this.initTable({ vm: this });},handleSizeChange(size) {this.page.pageSize = size;this.page.pageNo = 1;this.$emit('handleSizeChange', size);this.initTable({ vm: this });},/** *****************************动态渲染头部************************************* */ // 取消选中菜单changeChecked() {this.changeColumn({ vm: this });},changeColumn: debounce(async ({ vm }) => {const that = vm;const keys = new Set(vm.headItems);const activeColumn = vm.columns.filter((item) => {if (keys.has(item.title)) {return true;}return false;});that.activeColumn = activeColumn;that.activeColumn.splice(1, 0);}, 200),/** *****************************刷新************************************* */// 刷新表格数据(使⽤现有参数)refresh(type) {if (type === 'delete' && this.page.pageNo > 1 && this.tableData.length === 1) { this.page.pageNo = this.page.pageNo - 1;}this.initTable({ vm: this });},// 重新加载数据(重置到第⼀页)reload() {if (this.page.pageNo !== 1) {this.page.pageNo = 1;}this.initTable({ vm: this });},initTable: debounce(async ({ vm }) => {const that = vm;that.tableData = [];const params = that._.assign({pageNo: that.page.pageNo,pageSize: that.page.pageSize,sortStr: that.sort}, that.req.params); // 右值覆盖左值,返回左值// 发起请求,根据实际项⽬中,接⼝来做const { data } = await window.axios[that.req.type || 'post'](that.req.url, params); if (data && that.$utils.Type.isArray(data.result)) {that.tableData = data.result;that.page.total = data.total * 1;}that.$nextTick(() => {that.$emit('loadDone', that.tableData, params);});}, 300),getCheckRows() {return this.checkRows;},getCheckKeys() {return this.checkKeys;},handleHead(columns) {const allColumn = [];columns.map((item) => {if (!item.limit) {allColumn.push(item.title);}return true;});this.headItems = allColumn;this.allColumn = allColumn;this.changeChecked();},handleLayout() {const layout = yout;if (!layout) return null;layout.split(',').map((item) => {const key = item.trim();youtKey[key] = true;return true;},);return youtKey;},autoWidth(width) {if (this.$utils.isEmpty(width)) {return 'cell';}return width;},init() {this.handleLayout();this.handleHead(this.columns);if (this.defaultSort) {const { prop, order } = this.defaultSort;this.sort = `${prop} ${order === 'descending' ? 'desc' : 'asc'}`;}this.initTable({ vm: this });},},async created() {this.init();},watch: {queryParams: {handler() {this.reload({ vm: this });},},columns: {handler() {this.handleHead(this.columns);},},},computed: {queryParams() {if (this.$utils.isNotEmpty(this.req.params)) {return this.req.params;}return {};},},};</script><style lang="less" scoped>@import './style/index';</style>使⽤⽅法<template><div><table-list:req="tableReq"ref="tableList":stripe="true" // table 原来的参数也是⽀持使⽤的,⽅法也⽀持使⽤。
对对象的list集合以excel表格导出

对对象的list集合以excel表格导出1⾸先引⼊接⼝类package com.hailian.util;import javax.servlet.http.HttpServletResponse;/*** 将数据导出到excel接⼝定义* @author WangXuzheng**/public interface ExcelExportTemplate<T> {/*** 将数据导出为excel* @param outputStream ⽂件输出流* @param parameters 参数*/public void doExport(HttpServletResponse response,String fileName)throws Exception;/*** 要创建的excel⽂件的sheet名称* @return*/public String[] getSheetNames();/*** 要创建的excel表格中的表头内容.* list中存放的是多个sheet的表头内容* @return*/public String[][] getTitles();/*** 要创建的excel表格的每个sheet的表头* @return*/public String[] getCaptions();/*** 控制⽂件在内存中最多占⽤多少条* @return*/public int getRowAccessWindowSize();}2表格导出的实现类package com.hailian.util;import java.io.*;import ng.reflect.Method;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletResponse;import ng.StringUtils;import ng.Validate;import ermodel.HSSFCellStyle;import org.apache.poi.hssf.util.HSSFColor;import ermodel.Cell;import ermodel.CellStyle;import ermodel.Font;import ermodel.IndexedColors;import ermodel.Row;import ermodel.Sheet;import ermodel.Workbook;import org.apache.poi.ss.util.CellRangeAddress;import org.apache.poi.xssf.streaming.SXSSFWorkbook;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/*** @author WangXuzheng**/public abstract class SettlrExcelExportTemplate<T> implements ExcelExportTemplate<T> {Logger logger=LoggerFactory.getLogger(SettlrExcelExportTemplate.class);/*** 默认表格宽度*/private static final int DEFAULT_COLUMN_WIDTH = 5000;/*** excel⽂件对象*/protected Workbook workbook;/*** excel sheet列表*/protected List<Sheet> sheets = new ArrayList<Sheet>();/*** 标题栏*/protected String[][] titles;protected CellStyle captionRowSytle;/*** 默认标题⾏样式*/protected CellStyle titleRowStyle;/*** 默认内容⾏样式*/protected CellStyle bodyRowStyle;/*** 各个sheet是否包含抬头,key:sheet坐标,value:包含true,否则false*/protected Map<Integer, Boolean> hasCaptionMap = new HashMap<Integer, Boolean>();/*** 默认单元格宽度*/protected int columnWidth = DEFAULT_COLUMN_WIDTH;/*** 参数列表*/protected T parameters;/* (non-Javadoc)* @see com.haier.openplatform.excel.ExcelExportService#doExport(java.io.OutputStream) */@Overridepublic void doExport(HttpServletResponse response,String fileName) throws IOException { String[] sheetNames = this.getSheetNames();Validate.notEmpty(sheetNames);this.workbook = new SXSSFWorkbook(getRowAccessWindowSize());this.titles = this.getTitles();this.captionRowSytle = crateCaptionCellStyle();this.titleRowStyle = crateTitleCellStyle();this.bodyRowStyle = crateBodyCellStyle();this.afterCreateWorkBook();for (int i = 0; i < sheetNames.length; i++) {Sheet sheet = workbook.createSheet(sheetNames[i]);this.sheets.add(sheet);afterBuildSheet(i);buildCaption(i);buildTitle(i);afterBuildTitle(i);buildBody(i);afterBuildBody(i);}response.setContentType("application/vnd.ms-excel");response.setHeader("Content-disposition", "attachment;filename=" + fileName);OutputStream ouputStream = response.getOutputStream();workbook.write(ouputStream);ouputStream.flush();//workbook.close();ouputStream.close();}/*** 下载excel到指定⽬录* @throws IOException*/public void downloadExcel(String path) throws IOException{File file = new File(path);String[] sheetNames = this.getSheetNames();Validate.notEmpty(sheetNames);this.workbook = new SXSSFWorkbook(getRowAccessWindowSize());this.titles = this.getTitles();this.captionRowSytle = crateCaptionCellStyle();this.titleRowStyle = crateTitleCellStyle();this.bodyRowStyle = crateBodyCellStyle();this.afterCreateWorkBook();for (int i = 0; i < sheetNames.length; i++) {Sheet sheet = workbook.createSheet(sheetNames[i]);this.sheets.add(sheet);afterBuildSheet(i);buildCaption(i);buildTitle(i);afterBuildTitle(i);buildBody(i);afterBuildBody(i);}BufferedOutputStream ouputStream = new BufferedOutputStream(new FileOutputStream(file));workbook.write(ouputStream);ouputStream.flush();ouputStream.close();}/*** 创建单元格* @param row* @param index* @param cellValue* @param cellStyle*/protected void createStyledCell(Row row,int index,String cellValue,CellStyle cellStyle){Cell cell = row.createCell(index);cell.setCellValue(cellValue==null?"":cellValue);cell.setCellStyle(cellStyle);}/*** 创建单元格(数字类型)* @param row* @param index* @param cellValue* @param cellStyle* @throws Exception*/protected <E extends Number> void createNumStyledCell(Row row,int index,E cellValue,CellStyle cellStyle){ Cell cell = row.createCell(index);cell.setCellValue(numParseDouble(cellValue));cell.setCellStyle(cellStyle);}/*** 数字类型转double* @param e* @return*/private <E extends Number> Double numParseDouble(E e){double value=0;if(e!=null){Method m;try {m = e.getClass().getMethod("doubleValue");value=(Double)m.invoke(e);} catch (Exception e1) {logger.error(e1.getMessage(),e1);}}return value;}/*** 创建单元格* @param row* @param index* @param cellValue* @param cellStyle*/protected void createStyledCell(Row row,int index,Double cellValue,CellStyle cellStyle){Cell cell = row.createCell(index);if(cellValue==null){cell.setCellValue("");}else{cell.setCellValue(cellValue);}cell.setCellStyle(cellStyle);}/*** 创建Integer单元格* @param row* @param index* @param cellValue* @param cellStyle*/protected void createStyledCell(Row row,int index,Integer cellValue,CellStyle cellStyle){Cell cell = row.createCell(index);if(cellValue==null){cell.setCellValue("");}else{cell.setCellValue(cellValue);}cell.setCellStyle(cellStyle);}/*** @description 创建double类型单元格* @author lau* @version 2016-7-13上午11:36:06* @param*/protected void createStyledCell(Row row,int index,Long cellValue,CellStyle cellStyle){Cell cell = row.createCell(index);if(cellValue==null){cell.setCellValue("");}else{cell.setCellValue(cellValue);}cell.setCellStyle(cellStyle);}/*** 在创建完毕HSSFWorkBook对象和样式对象后作的处理操作,通常⽤来对默认的样式进⾏重新定义 */protected void afterCreateWorkBook(){}/*** 获取excel抬头样式* @return*/protected CellStyle crateCaptionCellStyle() {Font font = workbook.createFont();font.setColor(Font.COLOR_NORMAL);CellStyle cellStyle = workbook.createCellStyle();cellStyle.setWrapText(false);font.setFontHeight((short)250);cellStyle.setFont(font);cellStyle.setFillForegroundColor(IndexedColors.BLUE_GREY.index);cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);cellStyle.setAlignment(CellStyle.ALIGN_CENTER);return cellStyle;}/*** 获取excel表头样式* @return*/protected CellStyle crateTitleCellStyle() {Font font = workbook.createFont();font.setFontHeightInPoints((short) 9);// 字体⼤⼩font.setColor(HSSFColor.WHITE.index);// 字体颜⾊font.setFontName("微软雅⿊");// font.setColor(Font.COLOR_NORMAL);CellStyle cellStyle = workbook.createCellStyle();cellStyle.setWrapText(false);font.setFontHeight((short)250);cellStyle.setFont(font);cellStyle.setFillForegroundColor(HSSFColor.ROYAL_BLUE.index);cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);short border = 1;setCellBorder(cellStyle,border,border,border,border);cellStyle.setAlignment(CellStyle.ALIGN_CENTER);cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);return cellStyle;}/*** 设置单元格的border* @param cellStyle* @param top* @param bottom* @param left* @param right*/protected void setCellBorder(CellStyle cellStyle,short top,short bottom,short left,short right){cellStyle.setBorderBottom(bottom);cellStyle.setBorderLeft(left);cellStyle.setBorderRight(right);cellStyle.setBorderTop(top);}/*** 获取excel内容样式* @return*/protected CellStyle crateBodyCellStyle() {Font font = workbook.createFont();//font.setColor(HSSFColor.BLUE_GREY.index);font.setFontHeightInPoints((short) 9);// 字体⼤⼩font.setColor(HSSFColor.BLACK.index);// 字体颜⾊font.setFontName("微软雅⿊");CellStyle cellStyle = workbook.createCellStyle();cellStyle.setWrapText(false);cellStyle.setFont(font);cellStyle.setFillForegroundColor(HSSFColor.WHITE.index);cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);cellStyle.setAlignment(CellStyle.ALIGN_LEFT);cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);short border = 1;setCellBorder(cellStyle,border,border,border,border);return cellStyle;}/*** 获取第n个excel sheet* @param sheetIndex* @return*/protected Sheet getSheet(int sheetIndex) {return this.sheets.get(sheetIndex);}/*** 创建sheet完毕后做的操作* @param sheetIndex*/protected void afterBuildSheet(int sheetIndex) {}/*** 在sheet的第⼀⾏插⼊标题* @param sheetIndex*/protected void buildCaption(int sheetIndex){Sheet sheet = getSheet(sheetIndex);String[] captions = this.getCaptions();hasCaptionMap.put(sheetIndex, false);if(captions != null && captions.length >=sheetIndex +1){String caption = captions[sheetIndex];if(StringUtils.isNotBlank(caption)){Row row = sheet.createRow(0);int lastColumn = calculateLastColumn(sheetIndex);CellRangeAddress cellRangeAddress = new CellRangeAddress(0, 0, 0, lastColumn); sheet.addMergedRegion(cellRangeAddress);createStyledCell(row, 0, caption, this.captionRowSytle);hasCaptionMap.put(sheetIndex, true);}}}/*** 计算最后⼀列数据数据的* @param sheetIndex* @return*/protected int calculateLastColumn(int sheetIndex){if(this.titles != null && sheetIndex <= this.titles.length -1 && this.titles[sheetIndex] != null){ return this.titles[sheetIndex].length - 1;}else{return 1;}}/*** 创建sheet中数据的标题* @param sheetIndex*/protected void buildTitle(int sheetIndex){// TODO Auto-generated method stubif(this.titles.length < sheetIndex + 1){return;}String[] ts = this.titles[sheetIndex];if(ts == null){return;}//表头样式创建titleRowStyle=crateTitleCellStyle();//表头数填充Sheet sheet=this.getSheet(sheetIndex);int titleStartRow=this.getTitleStartIndex(sheetIndex);for(int i=titleStartRow;i<this.titles.length+titleStartRow;i++){Row title=sheet.createRow(i);for(int j=0;j<this.titles[i].length;j++){sheet.setColumnWidth(j, columnWidth);createStyledCell(title, j, this.titles[i][j], titleRowStyle);}}}/*** 获取各个sheet内容部分起始⾏index,默认为从第⼀⾏开始* @param sheetIndex sheet的index* @return*/protected int getBodyStartIndex(int sheetIndex){int captionRow = getTitleStartIndex(sheetIndex);;int titleRow = 0;if(this.titles != null && this.titles.length >= sheetIndex + 1){if(titles[sheetIndex] != null && titles[sheetIndex].length >0){titleRow = 1;}}return captionRow + titleRow;}/*** 获取各个sheet内容部分起始⾏index,默认为从第⼀⾏开始,⽀持三⾏以上动态表头* @param sheetIndex sheet的index* @return*/protected int getBodyStartIndex1(int sheetIndex){int captionRow = getTitleStartIndex(sheetIndex);;int titleRow = 0;if(this.titles != null && this.titles.length >= sheetIndex + 1){if(titles[sheetIndex] != null && titles.length >0){titleRow = titles.length;}}return captionRow + titleRow;}protected int getTitleStartIndex(int sheetIndex){return this.hasCaptionMap.get(sheetIndex) ? 1 : 0;}/*** 创建sheet中数据的标题之后做的操作* @param sheetIndex*/protected void afterBuildTitle(int sheetIndex) {}/*** 创建sheet中数据的内容* @param sheetIndex*/protected abstract void buildBody(int sheetIndex);/*** 创建sheet中数据的内容之后做的操作* @param sheetIndex*/protected void afterBuildBody(int sheetIndex) {}@Overridepublic String[] getCaptions() {return new String[]{};}@Overridepublic int getRowAccessWindowSize() {return 200;}}3针对list设置表头,前两个类可以直接引⼊。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
System.out.println("结束!");
}
}
在控制台将输出如下信息:
1
5
2
2
3.subList(int fromIndex, int toIndex)方法
在使用 subList(int fromIndex, int toIndex)方法截取现有 List 集合中的部分对象生成新的
List 集合时,需要注意的是,新生成的集合中包含起始索引位置代表的对象,但是不包含终止
System.out.println(list.indexOf(repeat));
System.out.println(stIndexOf(repeat));
System.out.println(list.indexOf(b));
System.out.println(stIndexOf(b));
list = list.subList(1, 3);// 利用从索引位置 1 到 3 的对象重新生成一个 List 集合
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("结束!");
System.out.println("开始:");
String a = "A", b = "B", c = "C", d = "D", repeat = "Repeat";
List<String> list = new ArrayList<String>();
list.add(a); // 索引位置为 0
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
src\com\mwq\TestCollection.java 完整代码:
package com.mwq;
import javtring> list = new ArrayList<String>();
list.add(a); // 索引位置为 0
list.add(b); // 索引位置为 1
list.add(c); // 索引位置为 2
list.add(d); // 索引位置为 3
list.add(e); // 索引位置为 4
// 索引位置为 0
list.add(repeat);
// 索引位置为 1
list.add(b);
// 索引位置为 2
list.add(repeat);
// 索引位置为 3
list.add(c);
// 索引位置为 4
list.add(repeat);
// 索引位置为 5
list.add(d);
// 索引位置为 6
import java.util.List;
public class TestCollection {
public static void main(String[] args) {
System.out.println("开始:");
String a = "A", b = "B", c = "C", d = "D", e = "E";
System.out.println(list.indexOf(repeat));
System.out.println(stIndexOf(repeat));
System.out.println(list.indexOf(b));
System.out.println(stIndexOf(b));
索引位置代表的对象,例如执行下面的代码:
src\com\mwq\TestCollection.java 关键代码:
public static void main(String[] args) {
String a = "A", b = "B", c = "C", d = "D", e = "E";
List<String> list = new ArrayList<String>();
List<String> list = new LinkedList<String>();
list.add(a);
list.add(e);
list.add(d);
list.set(1, b);// 将索引位置为1的对象 e 修改为对象 b
list.add(2, c);// 将对象 c 添加到索引位置为2的位置
在控制台将输出如下信息:
A
B
C
D
因为 List 集合可以通过索引位置访问对象,所以还可以通过 for 循环遍历 List 集合,例如遍历上面代码
中的 List 集合的代码如下:
src\com\mwq\TestCollection.java 关键代码:
for (int i = 0; i < list.size(); i++) {
得指定对象的最小的索引位置,而后者是获得指定对象的最大的索引位置,前提条件是指定的对象在 List
集合中具有重复的对象,否则如果在 List 集合中有且仅有一个指定的对象,则通过这两个方法获得的索
引位置是相同的,例如执行下面的代码:
src\com\mwq\TestCollection.java 关键代码:
索引位置的对象
//
}
System.out.println("结束!");
}
}
2.indexOf(Object obj)方法和 lastIndexOf(Object obj)方法的区别
在使用 List 集合时需要注意区分 indexOf(Object obj)方法和 lastIndexOf(Object obj)方法,前者是获
public static void main(String[] args) {
String a = "A", b = "B", c = "C", d = "D", repeat = "Repeat";
List<String> list = new ArrayList<String>();
list.add(a);
list.add(a);
// 索引位置为 0
list.add(b);
// 索引位置为 1
list.add(c);
// 索引位置为 2
list.add(d);
// 索引位置为 3
list.add(e);
// 索引位置为 4
list = list.subList(1, 3);// 利用从索引位置 1 到 3 的对象重新生成一个 List 集合
}
}
在控制台将输出如下信息:
B
C
java 中 List 的用法和实例详解 List 的用法 List 包括 List 接口以及 List 接口的所有实现类。因为 List 接口实现了 Collection 接口,所以 List 接 口拥有 Collection 接口提供的所有常用方法,又因为 List 是列表类型,所以 List 接口还提供了一些适 合于自身的常用方法,如表1所示。
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
//
for (int i = 0; i < list.size(); i++) {
//
System.out.println(list.get(i));// 利用 get(int index)方法获得指定
import java.util.Iterator;
import java.util.List;
public class TestCollection {
public static void main(String[] args) {
System.out.println("开始:");
String a = "A", b = "B", c = "C", d = "D", e = "E";
list.add(repeat); // 索引位置为 1
list.add(b); // 索引位置为 2
list.add(repeat); // 索引位置为 3
list.add(c); // 索引位置为 4
list.add(repeat); // 索引位置为 5
list.add(d); // 索引位置为 6
}
src\com\mwq\TestCollection.java 完整代码如下:
package com.mwq;
import java.util.ArrayList;
import java.util.List;
public class TestCollection {
public static void main(String[] args) {