前言

解决POI 导出功能,过时方法和新增样式放在最下面 或者参考下文
POI 样式调节

0.maven(新版本)

<poi.version>4.1.2</poi.version><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi.version}</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>${poi.version}</version></dependency>

POI样式集合参考链接

准备

package ins.platfrom.utils;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;public class ExcelUtils {private final static String excel2003 = ".xls";private final static String excel2007 = ".xlsx";private static final String EMPTY = "";private static final String POINT = ".";private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");/*** 获取单元格里的数据** @param hssfCell* @return*/private static String getHCellValue(HSSFCell hssfCell) {if (hssfCell == null) {return null;}if (hssfCell.getCellType() == CellType.BOOLEAN) {return String.valueOf(hssfCell.getBooleanCellValue());} else if (hssfCell.getCellType() == CellType.NUMERIC) {String cellValue = "";if (HSSFDateUtil.isCellDateFormatted(hssfCell)) {Date date = HSSFDateUtil.getJavaDate(hssfCell.getNumericCellValue());cellValue = sdf.format(date);} else {DecimalFormat df = new DecimalFormat("#.##");cellValue = df.format(hssfCell.getNumericCellValue());String strArr = cellValue.substring(cellValue.lastIndexOf(POINT) + 1, cellValue.length());if (strArr.equals("00")) {cellValue = cellValue.substring(0, cellValue.lastIndexOf(POINT));}}return cellValue;} else {return String.valueOf(hssfCell.getStringCellValue());}}/*** 获取单元格里的数据* @param xssfCell* @return*/public static String getXCellValue(XSSFCell xssfCell) {if (xssfCell == null) {return null;}if (xssfCell.getCellType() == CellType.BOOLEAN) {return String.valueOf(xssfCell.getBooleanCellValue());} else if (xssfCell.getCellType() == CellType.NUMERIC) {String cellValue = "";if (HSSFDateUtil.isCellDateFormatted(xssfCell)) {Date date = HSSFDateUtil.getJavaDate(xssfCell.getNumericCellValue());cellValue = sdf.format(date);} else {DecimalFormat df = new DecimalFormat("#.##");cellValue = df.format(xssfCell.getNumericCellValue());String strArr = cellValue.substring(cellValue.lastIndexOf(POINT) + 1, cellValue.length());if (strArr.equals("00")) {cellValue = cellValue.substring(0, cellValue.lastIndexOf(POINT));}}return cellValue;} else {return String.valueOf(xssfCell.getStringCellValue());}}/*** @Author:  - sheep* @Date: 2019/3/4 11:56* @return: 功能描述:<br>* 获取单元格里的数据*/public static String getXCellValue1(Cell cell) {if (cell == null) {return null;}if (cell.getCellType() == CellType.BOOLEAN) { //布尔型return String.valueOf(cell.getBooleanCellValue());} else if (cell.getCellType() == CellType.NUMERIC) { //数值型String cellValue = "";if (HSSFDateUtil.isCellDateFormatted(cell)) {Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());cellValue = sdf.format(date);} else {DecimalFormat df = new DecimalFormat("#.###");cellValue = df.format(cell.getNumericCellValue());String strArr = cellValue.substring(cellValue.lastIndexOf(POINT) + 1, cellValue.length());if (strArr.equals("00")) {cellValue = cellValue.substring(0, cellValue.lastIndexOf(POINT));}}return cellValue;} else if (cell.getCellType() == CellType.FORMULA) { //公式型return cell.getCellFormula();} else if (cell.getCellType() == CellType.STRING) { //字符串类型return String.valueOf(cell.getStringCellValue());} else { //异常类型 或 空return null;}}/*** @Author:  - sheep* @Date: 2019/3/4 12:32* @return: 功能描述:<br>* 判断excel文件的格式*/public static Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {Workbook wb = null;String fileType = fileName.substring(fileName.lastIndexOf("."));if (excel2003.equals(fileType)) {wb = new HSSFWorkbook(inStr);} else if (excel2007.equals(fileType)) {wb = new XSSFWorkbook(inStr);} else {throw new Exception("上传的Excel文件格式有误。请检查。");}return wb;}public static boolean isCellEmpty(Cell cell) {if (cell == null || String.valueOf(cell).length() == 0) {return true;}return false;}}

0.工具类 (只读取)

   /*** 六月 测试* @param file* @return*/public CommonResult JuneTest(MultipartFile file) {//工作簿Workbook work;try {//文件名String filename = file.getOriginalFilename();log.info("上传发起任务文件:" + filename);work = ExcelUtils.getWorkbook(file.getInputStream(), filename);} catch (Exception e) {log.info("读取失败");return new CommonResult<>("400", "读取失败", "");}//获取第一个表 你有几个就写几个 多个写循环Sheet sheet = work.getSheetAt(0);//获取行数int lastRowIndex = sheet.getLastRowNum();log.info("总行数:" + lastRowIndex);//反馈上传信息String strMsg = "";//去重Set<String> openidset = new HashSet<>();//读取上传文件for (int i = 0; i <= lastRowIndex; i++) {if (i % 200 == 0) {log.info("第:" + i);}//跳过表头if (i == 0) {continue;}Row row = sheet.getRow(i);if (row == null && i == lastRowIndex) {break;} else if (row == null) {strMsg += "第" + (i + 1) + "行数据为空。";continue;}//获取当前行列数short lastCellNum = row.getLastCellNum();String openid = "";for (int j = 0; j < lastCellNum; j++) {Cell cell = row.getCell(j);if (cell == null) {if (lastCellNum == 1) {strMsg += "第" + (i + 1) + "行数据为空" + j;}continue;} else {//获取每一列值 默认取值为字符串String cellValue = cell.getStringCellValue().trim();if (j == 0) {//第一列 根据自己具体业务需求修改} else if (j == 1) {openid=cellValue;}  }}//涉及判断是否文件某一元素去重if(openidset.contains(openid)){log.info("重复元素,第"+(i+1)+"行,"+openid);continue;}else {openidset.add(openid);}//具体业务逻辑 可以入库 保存 。。。}openidset.clear();return new CommonResult<>("200", "success", strMsg);}

读取判断加输出文件

我的这篇逻辑为上传用户手机号或者身份证号查找用户然后输出对应的查询结果下载文件

     /*** 读取上传文件* 筛选数据* 提供下载链接* @param file* @return*/public CommonResult Test(MultipartFile file, HttpServletResponse response) {File sumpath = new File(sumPath);if (!sumpath.exists()) {sumpath.mkdir();}Workbook work;//1、创建Excel工作薄XSSFWorkbook isbook;XSSFWorkbook nobook;//查询存在文件Sheet issheet;//记录不存在文件Sheet nosheet;try {String filename = file.getOriginalFilename();log.info("上传发起任务文件:" + filename);work = ExcelUtils.getWorkbook(file.getInputStream(), filename);isbook = new XSSFWorkbook();nobook = new XSSFWorkbook();//2 创建工作表issheet = isbook.createSheet();nosheet = nobook.createSheet();} catch (Exception e) {log.info("读取失败");return new CommonResult<>("400", "读取失败", "");}Sheet sheet = work.getSheetAt(0);//获取行数int lastRowIndex = sheet.getLastRowNum();log.info("总行数:" + lastRowIndex);Set<String> openidset = new HashSet<>();Map<String, Integer> map = new HashMap<>();//反馈上传信息String strMsg = "";//读取上传文件for (int i = 0; i <= lastRowIndex; i++) {if(i%200==0){log.info("第:"+i);}//跳过表头if (i == 0) {continue;}if (i % 1000 == 0) {log.info(i + "");}Row row = sheet.getRow(i);if (row == null && i == lastRowIndex) {break;} else if (row == null) {strMsg += "第" + (i + 1) + "行数据为空。";continue;}//获取当前行列数short lastCellNum = row.getLastCellNum();String phone = "";String idcard = "";for (int j = 0; j < lastCellNum; j++) {Cell cell = row.getCell(j);if (cell == null) {if(lastCellNum==1){strMsg += "第" + (i + 1) + "行数据为空" + j;}continue;} else {//获取每一列值String cellValue = cell.getStringCellValue().trim();if (j == 0) {phone = cellValue;} else if(j ==1) {idcard = cellValue;}}}//查询用户是否存在 自定义String openid = weChatTokenMapper.findOpenidByIdOrPhone(phone, idcard);Boolean isexit = openidset.contains(openid);//存在保存 不存在也保存int islastRowNum = issheet.getLastRowNum();int nolastRowNum = nosheet.getLastRowNum();// 行对象通用变量Row nRow = null;// 单元格对象通用变量Cell nCell = null;//默认创建第一列if (openid != null && !"".equals(openid) && !isexit) {openidset.add(openid);map.put(openid, 1);//3 创建行 行号需要+1nRow = issheet.createRow(++islastRowNum);//4 创建单元格nCell = nRow.createCell(0);//5 设置内容 uidnCell.setCellValue(openid);} else {if (openid != null && !"".equals(openid) && isexit) {Integer integer1 = map.get(openid);map.put(openid, ++integer1);}nRow = nosheet.createRow(++nolastRowNum);//4 创建单元格  //默认创建第一列nCell = nRow.createCell(0);//5 设置内容 uidnCell.setCellValue(phone);nCell = nRow.createCell(1);//5 设置内容 uidnCell.setCellValue(idcard);nCell = nRow.createCell(3);//5 设置内容 uidif (isexit) {nCell.setCellValue(isexit);}}}if (IFNull.strNotNull(strMsg)) {return new CommonResult<>("400", "读取失败", strMsg);}String isexistPath = sumPath + SnowFlakeUtil.getId() + "_" + DateUtil.getNYR() + "isexist.xlsx";String noexistPath = sumPath + SnowFlakeUtil.getId() + "_" + DateUtil.getNYR() + "noexist.xlsx";try {FileOutputStream isoutput = new FileOutputStream(isexistPath);FileOutputStream nooutput = new FileOutputStream(noexistPath);//写入磁盘isbook.write(isoutput);nobook.write(nooutput);isoutput.close();nooutput.close();
//            downloadTemplate(isexistPath,response);} catch (Exception e) {e.printStackTrace();}return new CommonResult<>("200", "success", isexistPath);}

1. 添加maven依赖(旧版本)

<poi.version>3.11</poi.version><!-- Excel解析工具类  --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi.version}</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>${poi.version}</version>
</dependency>

2.POI导出的步骤:

          1 创建工作簿2 创建工作表3 创建行4 创建单元格5 设置内容6 设置内容格式7   下载

3. demo1 普通导入

注:下载上传都是同步请求 AJAX无法页面下载
解决方案:使用页面同步请求
新版本的最后一栏有更新

       // $.ajax({//     url:"/user/exportXls",//     type:"GET"// })//正确请求路径location.href="/user/exportXls";
    @Resourceprivate UserService userService;@GetMapping("exportXls")public void contextLoads(HttpServletResponse response) throws Exception{//准备要报表的数据List<User> all = userService.findAll();// 1 创建工作簿  xls  HSSFWorkbook    xlsx XSSFWorkbookWorkbook wb = new XSSFWorkbook();// 2 创建工作表Sheet sheet = wb.createSheet();//定义公共变量//行号 和 列号int rowNo=0,cellNo=0;// 行对象通用变量Row nRow = null;// 单元格对象通用变量Cell nCell = null;/****************内容打印****************/for (User user:all){//3 创建行 行号需要+1nRow = sheet.createRow(rowNo++);//4 创建单元格nCell = nRow.createCell(cellNo++);//5 设置内容 uidnCell.setCellValue(user.getUid());//6 设置内容格式nCell.setCellStyle(contentStyle(wb));//TelephonenCell = nRow.createCell(cellNo++);nCell.setCellValue(user.getTelephone());nCell.setCellStyle(contentStyle(wb));//MailnCell = nRow.createCell(cellNo++);nCell.setCellValue(user.getMail());nCell.setCellStyle(contentStyle(wb));//PasswordnCell = nRow.createCell(cellNo++);nCell.setCellValue(user.getPassword());nCell.setCellStyle(contentStyle(wb));//TypenCell = nRow.createCell(cellNo++);nCell.setCellValue(user.getType());nCell.setCellStyle(contentStyle(wb));//cellNo归0 为了不出现换行后错列cellNo = 0;}// 7 下载DownloadUtil downloadUtil = new DownloadUtil();//ByteArrayOutputStream byteArrayOutputStream -- 输出流ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 将wb写进流wb.write(byteArrayOutputStream);// HttpServletResponse response -- response// String returnName -- 下载的名字downloadUtil.download(byteArrayOutputStream,response,"运单表.xlsx");}public CellStyle contentStyle(Workbook wb){CellStyle cellStyle = wb.createCellStyle();cellStyle.setBorderTop(CellStyle.BORDER_THIN);cellStyle.setBorderRight(CellStyle.BORDER_THIN);cellStyle.setBorderBottom(CellStyle.BORDER_THIN);cellStyle.setBorderLeft(CellStyle.BORDER_THIN);Font font = wb.createFont();font.setFontHeight((short)200);cellStyle.setFont(font);return cellStyle;}

下载结果

4. demo2 加入标题 +单元格合并+字体设置

新版本的最后一栏有更新

package com.czxy.bos.controller.print;import com.czxy.bos.domain.take_delivery.WayBill;
import com.czxy.bos.service.take_delivery.WayBillService;
import com.czxy.bos.util.DownloadUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.util.Date;
import java.util.List;@RestController
@RequestMapping("/report")
public class ReportController {@Autowiredprivate WayBillService wayBillService;@GetMapping("exportXls")public void exportXls(HttpServletResponse response) throws Exception{/*** 查找数据之后,下面只需要将内容写进xls中,然后下载*/List<WayBill> wayBillList = wayBillService.findAllWayBill();//1 创建工作簿  xls  HSSFWorkbook xlsx XSSFWorkbookWorkbook wb = new XSSFWorkbook();//2 创建工作表Sheet sheet = wb.createSheet();// 设置列宽---1/256 一个字符的宽度sheet.setColumnWidth(0,15*256);sheet.setColumnWidth(1,15*256);sheet.setColumnWidth(2,15*256);sheet.setColumnWidth(3,25*256);sheet.setColumnWidth(4,25*256);sheet.setColumnWidth(5,25*256);sheet.setColumnWidth(6,25*256);sheet.setColumnWidth(7,25*256);sheet.setColumnWidth(8,25*256);/*** 定义公共变量*/int rowNo=0,cellNo=0;//行号  和  列号Row nRow = null;// 行对象通用变量Cell nCell = null;// 单元格对象通用变量/****************大标题打印****************///3 创建行nRow = sheet.createRow(rowNo);//4 创建单元格nCell = nRow.createCell(cellNo);//5 设置内容nCell.setCellValue("bos项目运单表统计"+new Date().toLocaleString());//6 设置内容格式// 合并单元格  //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列sheet.addMergedRegion(new CellRangeAddress(0, 0, (short) 0, (short) 9));// 垂直居中  +   水平居中  +  加粗CellStyle bigTitleCellStyle = bigTitleStyle(wb);nCell.setCellStyle(bigTitleCellStyle);/****************小标题打印****************/String[] titles={"编号id","运单编号","订单编号","寄件人姓名","寄件人电话","寄件人地址","收件人姓名","收件人电话","收件人地址"};// 进入小标题打印的时候,行号变化吗?rowNo=0rowNo++;// 进入小标题打印的时候,列号需要变化吗?cellNo = 0;//3 创建行nRow = sheet.createRow(rowNo);for (String title:titles){//4 创建单元格nCell = nRow.createCell(cellNo++);// 先创建单元格,然后在新增//5 设置内容nCell.setCellValue(title);//6 设置内容格式nCell.setCellStyle(titleStyle(wb));}/****************内容打印****************/// 单元格需要变化吗rowNo++;cellNo=0;for(WayBill wayBill:wayBillList){//3 创建行nRow = sheet.createRow(rowNo++);//4 创建单元格//id 对象遍历 需要多少写多少nCell = nRow.createCell(cellNo++);nCell.setCellValue(wayBill.getId());nCell.setCellStyle(contentStyle(wb));//wayBillNumnCell = nRow.createCell(cellNo++);nCell.setCellValue(wayBill.getWayBillNum());nCell.setCellStyle(contentStyle(wb));//cellNo归0cellNo = 0;}/****************下载****************/DownloadUtil downloadUtil = new DownloadUtil();//ByteArrayOutputStream byteArrayOutputStream -- 输出流ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();// 将wb写进流wb.write(byteArrayOutputStream);// HttpServletResponse response -- response// String returnName -- 下载的名字downloadUtil.download(byteArrayOutputStream,response,"运单表.xlsx");System.out.println("okokokok....");}/*** 垂直居中  +   水平居中  +  加粗* @param wb* @return*/public CellStyle bigTitleStyle(Workbook wb){// 创建格式CellStyle cellStyle = wb.createCellStyle();// 水平对齐方式cellStyle.setAlignment(CellStyle.ALIGN_CENTER);// 垂直居中cellStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);// 设置字体Font font = wb.createFont();// 是数值的1/20 大小font.setFontHeight((short) 480);font.setBold(true);font.setColor(Font.COLOR_RED);cellStyle.setFont(font);return cellStyle;}public CellStyle titleStyle(Workbook wb){CellStyle cellStyle = wb.createCellStyle();cellStyle.setBorderTop(CellStyle.BORDER_THIN);cellStyle.setBorderRight(CellStyle.BORDER_THIN);cellStyle.setBorderBottom(CellStyle.BORDER_THIN);cellStyle.setBorderLeft(CellStyle.BORDER_THIN);Font font = wb.createFont();font.setFontHeight((short)300);cellStyle.setFont(font);return cellStyle;}public CellStyle contentStyle(Workbook wb){CellStyle cellStyle = wb.createCellStyle();cellStyle.setBorderTop(CellStyle.BORDER_THIN);cellStyle.setBorderRight(CellStyle.BORDER_THIN);cellStyle.setBorderBottom(CellStyle.BORDER_THIN);cellStyle.setBorderLeft(CellStyle.BORDER_THIN);Font font = wb.createFont();font.setFontHeight((short)200);cellStyle.setFont(font);return cellStyle;}}

更新版本(2021.03.14)

样式更新

    public CellStyle contentStyle(Workbook wb){CellStyle cellStyle = wb.createCellStyle();// 水平对齐方式cellStyle.setAlignment(HorizontalAlignment.CENTER);// 垂直居中cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//设置背景色cellStyle.setFillForegroundColor(IndexedColors.AQUA.getIndex());cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);Font font = wb.createFont();font.setFontHeight((short)200);cellStyle.setFont(font);return cellStyle;}

边框更新

以前为一个单元格形式添加 现在为整行添加一次 解除代码冗余 使用了新的书写格式

    public CellStyle rowStyle(Workbook wb){CellStyle cellStyle = wb.createCellStyle();//设置边框cellStyle.setBorderTop(BorderStyle.THIN);cellStyle.setBorderRight(BorderStyle.THIN);cellStyle.setBorderBottom(BorderStyle.THIN);cellStyle.setBorderLeft(BorderStyle.THIN);//方法无效 设置全行背景色
//        cellStyle.setFillBackgroundColor(IndexedColors.AQUA.getIndex());Font font = wb.createFont();font.setFontHeight((short)200);cellStyle.setFont(font);return cellStyle;}

创建sheet名 设置单元格宽度

        // 2 创建工作表Sheet sheet = wb.createSheet();wb.setSheetName(0,"PVA分析");//七个字符宽度sheet.setColumnWidth(0,7*256);

祝你幸福
送你一首歌:《城南花已开》三亩地
附图:插画师LOST7_的《睡了吗?摘颗星星给你》

POI Excel格式报表生成 同步下载问题解决相关推荐

  1. 报表技术之Excel格式报表生成(POI)

    报表技术之Excel格式报表生成(POI) 1.找到你的页面的导出Excel的按钮 2.给导出按钮添加事件 3. 编写 ReportAction 添加 exportXls 方法 POI 生成 Exce ...

  2. Excel格式报表生成 (POI技术)

    导入poi报表需要的jar包 <poi.version>3.11</poi.version> <dependency><groupId>org.apac ...

  3. SpringMVC + JDBC + POI Excel导出与导入 +下载 资源

    最近用 POI 做了个 导入 导出,所以自己就搭了个 SpringMVC + JDBC + POI 的简单框架,把过程 记录一下,方便回忆 demo框架: SpringMVC + JDBC  数据库: ...

  4. 报表技术之PDF格式报表生成 (IText)

    报表技术之PDF格式报表生成 (IText) IText介绍 官网: http://itextpdf.com/ 最新 iText7 涉及商业收费 1.在maven项目中导入itext jar 支持 2 ...

  5. POI导出Excel,浏览器不下载的问题解决

    在做POI导出Excel的时候,遇到了浏览器不弹出下载框的问题 问题发现 debug跟进发现输出流已经成功写入,而且程序没有报错,可就是没有下载提示 在前台控制器的XHR-response中查看返回数 ...

  6. POI .xlsx格式前端下载为.xls问题解决

    前言 后端导出Excel,设置为.xlsx后缀,swagger 下载为.xlsx格式,前端下载为.xls格式 而且每次打开文件都要报错提示为 "xx.xls"的文件格式和扩展名不匹 ...

  7. 关于jsp页面转换成excel格式下载遇到问题及解决

    jsp页面转成excel格式的实现思路: 1.使用poi包:poi-bin-3.9-20121203 下载连接地址:http://www.apache.org/dyn/closer.cgi/poi/r ...

  8. 使用poi实现excel的上传下载

    文章目录 前言 一.poi是什么? 二.使用步骤 1.引入依赖 2.导出excel 3.导入excel 总结 前言 excel的上传下载是常见的需求,这里记录一下使用poi实现Excel的上传和下载 ...

  9. poi导出Excel直接在浏览器下载

    需求:导出成Excel格式,要在浏览器看到类似于下载的效果. 导出的Excel和下载在同一个目录下. xxController.java // 导出 @RequestMapping(value = & ...

最新文章

  1. 模板元编程时的参数推导类型输出
  2. python水仙花数的代码_Python 求“水仙花数”的方法和具体代码
  3. 零基础学编程学java还是python-小白学编程选java、php、前端还是python
  4. csu 1548: Design road (三分)
  5. linux定时任务实例,linux定时任务访问url实例
  6. SonarQube系列二、分析dotnet core/C#代码
  7. 入门干货之用DVG打造你的项目主页-Docfx、Vs、Github
  8. 班图ubuntu linux 5.1相当好用,windows危险了!
  9. 华为android10版本,华为手机助手(安卓版)最新手机版10.1.1.500
  10. Linux入门及安装教程
  11. 定时自动关机程序/脚本
  12. 数据库完整性实验报告
  13. MAC快捷键---8
  14. oracle写求余函数,Oracle取余函数mod
  15. 开关电源初级和次级变压器之间的Y电容作用
  16. JDT 随记---介绍
  17. LVGL - 在STM32上的移植
  18. RedHat RHEL7.2 系统安装详细步骤
  19. 计算机网络不同网段,WIN7系统计算机不同网段如何共享资源
  20. 反射内存 延时_一种基于反射内存卡的OpenDDS分布式通信方法与流程

热门文章

  1. python对三维数组切片
  2. buildroot 编译项目出现的一些error
  3. m进制转换为n进制-任意进制转换算法
  4. Feign的调用原理及其源码分析
  5. 关于试装国产操作系统UOS以及一些想法壁纸分享
  6. 什么是服务网格service-mesh?
  7. 《2020下半年中国地方政府数据开放报告》发布(附PDF版本)
  8. 图像拼接技术的入门术语
  9. Pycharm Remote Debug 出现远程文件找不到的问题
  10. Java 之 事务与 hibernate