将excel封装成表格控件
1. 如何封装excel工作表
使用VB可以。
使用VBA可做到类似效果,即在打开excel文件后隐藏文件主窗体而显示userform,命令行为: Application.Visible=False2. 把excel表封装成程序
具体步骤如下:
1.打开文件夹,找到EXCEL文件,里面有很多表格。
2.鼠标右击“示例”文件,弹出菜单中点:添加到压缩文件。
3.然后我们点击确定。
4.就压缩好了。
3. excel封装函数
首先要导入spring相关包,poi,和fileupload包,我是使用maven构建的。
一.导入excel
(1)使用spring上传文件
a.前台页面提交
<form name="excelImportForm" action="${pageContext.request.contextPath}/brand/importBrandSort" method="post" enctype="multipart/form-data" id="excelImportForm">
<input type="hidden" name="ids" id="ids">
<div >
<div >
<label ><input id="excel_file" type="file" name="filename" accept="xls"/></label>
<div >
<input id="excel_button" type="submit" value="导入Excel"/>
</div>
</div>
</div>
<div >
<button type="button" data-dismiss="modal" >取消</button>
</div>
b.后台spring的controller进行相关操作,这里主要讲的是使用spring上传文件,和读取文件信息。
使用spring上传文件之前,需要配置bean。
<bean id="multipartResolver" ></bean>@RequestMapping(value = "/importBrandSort", method = RequestMethod.POST)
public ModelAndView importBrandSort(@RequestParam("filename") MultipartFile file,
HttpServletRequest request,HttpServletResponse response) throws Exception {
String temp = request.getSession().getServletContext()
.getRealPath(File.separator)
+ "temp"; // 临时目录
File tempFile = new File(temp);
if (!tempFile.exists()) {
tempFile.mkdirs();
}
DiskFileUpload fu = new DiskFileUpload();
fu.setSizeMax(10 * 1024 * 1024); // 设置允许用户上传文件大小,单位:位
fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:位
fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
// 开始读取上传信息
//
int index = 0;
/* List fileItems = null;
try {
fileItems = fu.parseRequest(request);
}
catch (Exception e) {
e.printStackTrace();
}
Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件
FileItem fileItem = null;
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();// 忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
fileItem = item;
// index++;
}
}
if (fileItem == null)
return null;
*/
if (file == null)
return null;
logger.info(file.getOriginalFilename());
String name = file.getOriginalFilename();// 获取上传文件名,包括路径
//name = name.substring(name.lastIndexOf("\\") + 1);// 从全路径中提取文件名
long size = file.getSize();
if ((name == null || name.equals("")) && size == 0)
return null;
InputStream in = file.getInputStream();
List<BrandMobileInfoEntity> BrandMobileInfos = brandService
.importBrandPeriodSort(in);
// 改为人工刷新缓存KeyContextManager.clearPeriodCacheData(new
// PeriodDimensions());// 清理所有缓存
int count = BrandMobileInfos.size();
String strAlertMsg ="";
if(count!=0){
strAlertMsg= "成功导入" + count + "条!";
}else {
strAlertMsg = "导入失败!";
}
logger.info(strAlertMsg);
//request.setAttribute("brandPeriodSortList", BrandMobileInfos);
//request.setAttribute("strAlertMsg", strAlertMsg);
request.getSession().setAttribute("msg",strAlertMsg);
return get(request, response);
//return null;
}
代码中的注释部分是如果不使用spring的方式,如何拿到提交过来的文件名(需要是要apache的一些工具包),其实使用spring的也是一样,只是已经做好了封装,方便我们写代码。
代码中的后半部分是读取完上传文文件的信息和对数据库进行更新之后,输出到前台页面的信息。
上述代码中: InputStream in = file.getInputStream();
List<BrandMobileInfoEntity> BrandMobileInfos = brandService
.importBrandPeriodSort(in);读取excel的信息。
(2)使用poi读取excel
a.更新数据库
@Override
public List<BrandMobileInfoEntity> importBrandPeriodSort(InputStream in) throws Exception {
List<BrandMobileInfoEntity> brandMobileInfos = readBrandPeriodSorXls(in);
for (BrandMobileInfoEntity brandMobileInfo : brandMobileInfos) {
mapper.updateByConditions(brandMobileInfo);
}
return brandMobileInfos;
}
这部分是sevice层的代码,用于读取excel信息之后更新数据库数据,我这里是使用mybatis。定义一个类BrandMobileInfoEntity,用与保存excel表每一行的信息,而List< BrandMobileInfoEntity > 则保存了全部信息,利用这些信息对数据库进行更新。
b.读取excel信息
private List<BrandMobileInfoEntity> readBrandPeriodSorXls(InputStream is)
throws IOException, ParseException {
HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
List<BrandMobileInfoEntity> brandMobileInfos = new ArrayList<BrandMobileInfoEntity>();
BrandMobileInfoEntity brandMobileInfo;
// 循环工作表Sheet
for (int numSheet = 0;
numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
if (hssfSheet == null) {
continue;
}
// 循环行Row
for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
brandMobileInfo = new BrandMobileInfoEntity();
HSSFRow hssfRow = hssfSheet.getRow(rowNum);
for (int i = 0; i < hssfRow.getLastCellNum(); i++) {
HSSFCell brandIdHSSFCell = hssfRow.getCell(i);
if (i == 0) {
brandMobileInfo.setBrandId(Integer
.parseInt(getCellValue(brandIdHSSFCell)));
} else if (i == 1) {
continue;
} else if (i == 2) {
brandMobileInfo.setMobileShowFrom(Integer.parseInt(getCellValue(brandIdHSSFCell)));
} else if (i == 3) {
brandMobileInfo.setMobileShowTo(Integer.parseInt(getCellValue(brandIdHSSFCell)));
} else if (i == 4) {
brandMobileInfo.setSellMarkValue(getCellValue(brandIdHSSFCell));
} else if (i == 5) {
brandMobileInfo.setWarehouse(getCellValue(brandIdHSSFCell));
} else if (i ==
4. excel表格封装
背景
在学习微信小程序的过程中,需要导出excel文件数据,可是却没有后台服务器,所以只能够想着使用纯前端去导出excel
使用插件:excel-export
导出思想
将数据封装成excel文件
将excel文件上传到云存储中
将云存储的excel文件以图片的格式下载到本地
修改图片文件后缀为xlsx,成为excel文件
操作
将数据封装成excel文件;将excel文件上传到云存储中
建立云函数(我的云函数名称:uploadexportfile),打开云函数终端,安装excel-export插件
// 云函数入口文件
const cloud = require('wx-server-sdk')
const nodeExcel = require('excel-export');
const path = require('path');
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
var tableMap = {
styleXmlFile:path.join(__dirname,"styles.xml"),
name: Date.now()+"-export",
cols: [],
rows: [],
}
var tableHead = ["编号", "名称", "生日", "年龄"];
//添加表头
for(var i=0;i<tableHead.length;i++){
tableMap.cols[tableMap.cols.length]={
caption:tableHead[i],
type:'string'
}
}
//表体:伪数据
const tableList = [
{编号:0,名称:'张三',生日:'2019-5-1',年龄:20},
{编号:1,名称:'李四',生日:'2019-5-1',年龄:45}
]
//添加每一行数据
for(var i=0;i<tableList.length;i++){
tableMap.rows[tableMap.rows.length]=[
tableList[i].编号,
tableList[i].名称,
tableList[i].生日,
tableList[i].年龄
]
}
//保存excelResult到相应位置
var excelResult = nodeExcel.execute(tableMap);
var filePath = "outputExcels";
var fileName = cloud.getWXContext().OPENID + "-" + Date.now()/1000 + '.xlsx';
//图片上传到云存储
return await cloud.uploadFile({
cloudPath: path.join(filePath, fileName),
fileContent: new Buffer(excelResult,'binary')
}).then(res=>{
console.log(res.fileID);
return res;
}).catch(err=>{
});
}
DOWNLOAD
//导出excel
function exportFile(dataHeader,dataList){
wx.showLoading({
title: '正在导出',
});
console.log(dataHeader);
console.log(dataList);
wx.cloud.callFunction({
name:'uploadexportfile',
data:{
dataHeader:dataHeader,
dataList:dataList
}
}).then(res=>{
const fileID = res.result.fileID;
//下载文件
wx.cloud.downloadFile({
fileID: fileID
}).then(res1 => {
this.saveFileToPhotosAlbum(res1);//保存文件到相册
this.delCloudFile(fileID);//删除云存储文件
}).catch(error => {
// handle error
})
}).catch(err1=>{
});
}
//保存文件到本地相册
function saveFileToPhotosAlbum(res){
//授权
this.writePhotosAlbumAuth();
// 保存文件
var saveTempPath = wx.env.USER_DATA_PATH + "/exportFile"+new Date().getTime()+".jpg";
wx.saveFile({
tempFilePath: res.tempFilePath,
filePath: saveTempPath ,
success:res1=> {
//获取了相册的访问权限,使用 wx.saveImageToPhotosAlbum 将图片保存到相册中
wx.saveImageToPhotosAlbum({
filePath: saveTempPath ,
success: res2 => {
//保存成功弹出提示,告知一下用户
wx.hideLoading();
wx.showModal({
title: '文件已保存到手机相册',
content: '文件位于tencent/MicroMsg/WeiXin下 \r\n将保存的文件重命名改为[ .xlsx ]后缀即可正常打开',
confirmColor: '#0bc183',
confirmText: '知道了',
showCancel: false
});
},
fail(err2) {
console.log(err2)
}
})
}
});
}
//删除云存储文件
function delCloudFile(fileID){
const fileIDs=[];
fileIDs.push(fileID);
//删除云存储中的excel文件
wx.cloud.deleteFile({
fileList: fileIDs,
success: res4 => {
// handle success
console.log(res.fileList);
},
fail: console.error
})
}
//上传单个文件
function uploadSingleFile(cloudPath,filePath){
wx.cloud.uploadFile({
cloudPath: cloudPath, // 上传至云端的路径
filePath: filePath, // 小程序临时文件路径
success: res => {
// 返回文件 ID
console.log(res.fileID)
},
fail: console.error
})
}
//微信图片保存到本地相册授权
function writePhotosAlbumAuth(){
wx.getSetting({
success(res) {
if (!res.authSetting['scope.writePhotosAlbum']) {
wx.authorize({
scope:'scope.writePhotosAlbum',
success() {
console.log('授权成功')
}
})
}
}
})
}
module.exports={
uploadSingleFile:uploadSingleFile,
exportFile:exportFile,
saveFileToPhotosAlbum:saveFileToPhotosAlbum,
delCloudFile:delCloudFile,
writePhotosAlbumAuth:writePhotosAlbumAuth
}
5. excel封装exe
1、Excel快捷键:Ctrl+A
Ctrl+A操作为:全选;只要单击活动单元格,并按Excel快捷键:Ctrl+A,A1:F10单元格区域即被选中;
2、Excel快捷键:Ctrl+B
Ctrl+B操作为:加粗;全选单元格后,我们按Excel快捷键:Ctrl+B;单元格区域的字体,都会加粗显示;
3、Excel快捷键:Ctrl+I
Ctrl+I操作为:倾斜;全选单元格后,我们按Excel快捷键:Ctrl+I;表格中的字体,都会倾斜显示;
4、Excel快捷键:Ctrl+U
Ctrl+U操作为:下划线;全选单元格后,我们按Excel快捷键:Ctrl+U;选中的字体,都会增加下划线;
5、Excel快捷键:Ctrl+C
Ctrl+C操作为:复制;我们先选中A2:F2单元格区域,并按Excel快捷键:Ctrl+C;第1行单元格会添加虚线,并被复制下来;
6、Excel快捷键:Ctrl+V
Ctrl+V操作为:粘贴;在复制第1行单元格后,单击A3单元格,并按Excel快捷键:Ctrl+V;即可将数据粘贴至第2行;
7、Excel快捷键:Ctrl+X
Ctrl+X操作为:剪切;按上述操作,把Ctrl+C改成Ctrl+X,即可将第1行数据,剪切到第2行;
excel快捷键
8、Excel快捷键:Ctrl+E
Ctrl+E操作为:智能填充;我们先选中F2单元格,并输入:魏国曹操,然后选中F2:F9单元格区域,按Excel快捷键:Ctrl+E;即可将B列和E列数据,智能填充至F列;
6. excel封装教程
Table.UserForm1.show 在窗体的加载事件里面调用 单击事件Private Sub UserForm_Initialize()CommandButton3_ClickEnd Sub
7. excel 封装
常用的话就写到加载宏中,然后用Function封装一下,直接返回数组就可以。
=========3.31
新增加载宏
具体如何加载宏可以自行检索, 我大概说一下, 使用版本excel2016专业增强版
如果你需要把老的xla转xlam, 可以这样~~~在
立即窗口
中运行ThisWorkbook.IsAddin = False
,然后另存为.xls文件, 转存xlam如何实现题目中的要求?
这里只是简单写了个二维数组,
注意, " _"这种换行写法不能写太多, 好像20多个就会报错.
怎么用
测试下~不要忘了数组公式如果返回多个结果是
Ctrl+Shift+Enter完成输入
测试VLOOKUP, 该vlookup只返回一个数值, 只需要回车即可,
并不是所有的函数都可以用数组代替单元格区域
8. excel封装成exe实例
视图”>“工具栏”>“自定义...”>“命令”>左边的方框中选“宏”>右边的方框中将“自定义按钮”拖到菜单栏上任意一个图标旁边>点“关闭”关掉对话框>点击菜单栏上刚刚拖上去的图标>在弹出的对话框中“宏名”处填入“你要的名字”>点“确定”,这个图标就已经与“你要的名字”关联好了。
9. excel如何封装成软件
Java程序打包成exe可执行文件,分为两大步骤。
第一步:将Java程序通过Eclipse或者Myeclipse导成Jar包第二步:通过exe4j讲Jar包程序生成exe可执行文件①先将java程序打包成jar文件②现在开始第二个大步骤:Exe4j对Jar包进行exe封装首先在某盘符底下建立一个文件夹,本例是在D盘建立的Java文件夹,然后将jre和程序所需的Jar包文件及Java程序所要读取的配置文件放入到文件夹。好,现在开始,首先打开exe4j程序第一步无需操作,直接点击“Next”
第二步:选择第二项”JAR in EXE” mode,然后点击“next第三步:设置完成后,点击“next”点击“next”点击“next”点击“next”设置大小版本号以后,点击右边节点的”Search sequence”点击 “ 绿色加号” 选择”Directory“添加JRE,JRE是第一步创建文件夹里的JRE成功后,点击“Save as”按钮,随便保存一个地方“保存”,这个文件不用,然后到第二部你保存的exe那个路径,找到你的exe文件