Excel中的模版是这样的 一个PNG 或者jpg 另外有一段表格 如图

首先呢,我们会想到poi这个工具

然后我的思路是先把图片取出来,然后利用G2P 将表格画出来,这样一想,就很简单了。下面看代码

取表格

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;import javax.imageio.ImageIO;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFFont;
import sun.awt.SunHints;public class DrawFromExcel {public static void main(String[] args) {}public static void ImgUtile(String file,int from,int from1,int to,int to1) throws Exception {// 给定两个初始值,标志出导出区域,两个行列组合的单元格int[] fromIndex = {from,from1};int[] toIndex = {to,to1};int imageWidth = 0;//图片初始长度值int imageHeight =0;//初始宽带值Workbook wb = WorkbookFactory.create(new FileInputStream(file));//打开路径 (名字可动态传值方便)Sheet sheet = wb.getSheetAt(0);List<CellRangeAddress> rangeAddress = sheet.getMergedRegions(); // 获取整个sheet中合并单元格组合的集合// 首先做初步的边界检测,如果指定区域是不合法的则抛出异常int rowSum = sheet.getPhysicalNumberOfRows();int colSum = sheet.getRow(0).getPhysicalNumberOfCells();if (fromIndex[0] > rowSum || fromIndex[0] > toIndex[0] || toIndex[0] > rowSum) {throw new Exception("the rowIndex of the area is wrong!");}if (fromIndex[1] > colSum || fromIndex[1] > toIndex[1] || toIndex[1] > colSum) {throw new Exception("the colIndex of the area is wrong!");}// 计算实际需要载入内存的二维Cell数组的大小,剔除隐藏行列int rowSize = toIndex[0]-fromIndex[0];//区域划分行System.out.println("rowSize:"+rowSize);int colSize = toIndex[1]-fromIndex[1];//区域划分列System.out.println("colSize:"+colSize);// 遍历需要扫描的区域UserCell[][] cells = new UserCell[rowSize][colSize];int[] rowPixPos = new int[rowSize + 1];rowPixPos[0] = 0;int[] colPixPos = new int[colSize + 1];colPixPos[0] = 0;for (int i = fromIndex[0]; i < toIndex[0]; i++) {for (int j = fromIndex[1]; j < toIndex[1]; j++) {cells[i-fromIndex[0]][j-fromIndex[1]] = new UserCell();if (sheet.getRow(i).getCell(j) !=null) {cells[i-fromIndex[0]][j-fromIndex[1]].setCell(sheet.getRow(i).getCell(j));}cells[i-fromIndex[0]][j-fromIndex[1]].setRow(i);cells[i-fromIndex[0]][j-fromIndex[1]].setCol(j);boolean ifShow=(i>=fromIndex[0]) && (j>=fromIndex[1]);   //首先行列要在指定区域之间ifShow=ifShow && !(sheet.isColumnHidden(j) || sheet.getRow(i).getZeroHeight());  //其次行列不可以隐藏cells[i-fromIndex[0]][j-fromIndex[1]].setShow(ifShow);// 计算所求区域宽度float widthPix = !ifShow ? 0 : sheet.getColumnWidthInPixels(j); // 如果该单元格是隐藏的,则置宽度为0if (i == fromIndex[0]) {imageWidth += widthPix;}colPixPos[j-fromIndex[1]+1] = (int) (widthPix * 1.15 + colPixPos[j-fromIndex[1]]);}// 计算所求区域高度boolean ifShow=(i>=fromIndex[0]); //行序列在指定区域中间ifShow=ifShow && !sheet.getRow(i).getZeroHeight(); //行序列不能隐藏float heightPoint = !ifShow ? 0 : sheet.getRow(i).getHeightInPoints(); // 如果该单元格是隐藏的,则置高度为0imageHeight += heightPoint;           rowPixPos[i-fromIndex[0]+1] = (int) (heightPoint * 96 / 72) + rowPixPos[i-fromIndex[0]];}imageHeight = imageHeight * 96 / 72;imageWidth = imageWidth * 115 / 100;wb.close();List<Grid> grids = new ArrayList<Grid>();for (int i = 0; i < rowSize; i++) {for (int j = 0; j < colSize; j++) {Grid grid = new Grid();// 设置坐标和宽高grid.setX(colPixPos[j]);grid.setY(rowPixPos[i]);grid.setWidth(colPixPos[j + 1] - colPixPos[j]);grid.setHeight(rowPixPos[i + 1] - rowPixPos[i]);grid.setRow(cells[i][j].getRow());grid.setCol(cells[i][j].getCol());grid.setShow(cells[i][j].isShow());// 判断是否为合并单元格int[] isInMergedStatus = isInMerged(grid.getRow(), grid.getCol(), rangeAddress);if (isInMergedStatus[0] == 0 && isInMergedStatus[1] == 0) {// 此单元格是合并单元格,并且不是第一个单元格,需要跳过本次循环,不进行绘制continue;} else if (isInMergedStatus[0] != -1 && isInMergedStatus[1] != -1) {// 此单元格是合并单元格,并且属于第一个单元格,则需要调整网格大小                 int lastRowPos=isInMergedStatus[0]>rowSize-1?rowSize-1:isInMergedStatus[0];int lastColPos=isInMergedStatus[1]>colSize-1?colSize-1:isInMergedStatus[1];                  grid.setWidth(colPixPos[lastColPos + 1] - colPixPos[j]);grid.setHeight(rowPixPos[lastRowPos + 1] - rowPixPos[i]);}CellStyle cs =cells[i][j].getCell().getCellStyle();// 单元格背景颜色if (cs.getFillPatternEnum() == FillPatternType.SOLID_FOREGROUND)grid.setBgColor(cells[i][j].getCell().getCellStyle().getFillForegroundColorColor());// 设置字体org.apache.poi.ss.usermodel.Font font = wb.getFontAt(cs.getFontIndex());grid.setFont(font);// 设置字体前景色if (font instanceof XSSFFont) {XSSFFont xf = (XSSFFont) font;grid.setFtColor(xf.getXSSFColor());}// 设置文本String strCell = "";switch (cells[i][j].getCell().getCellType()) {case HSSFCell.CELL_TYPE_NUMERIC:                                     strCell = String.format("%.2f", Double.parseDouble(String.valueOf(cells[i][j].getCell().getNumericCellValue())));break;case HSSFCell.CELL_TYPE_STRING: strCell = cells[i][j].getCell().getStringCellValue();break;case HSSFCell.CELL_TYPE_BOOLEAN:strCell = String.valueOf(cells[i][j].getCell().getBooleanCellValue());break;case HSSFCell.CELL_TYPE_FORMULA:try {strCell = String.valueOf(cells[i][j].getCell().getNumericCellValue());} catch (IllegalStateException e) {strCell = String.valueOf(cells[i][j].getCell().getRichStringCellValue());}break;default:strCell = "";}if(cells[i][j].getCell().getCellStyle().getDataFormatString().contains("0.00%")){try{double dbCell=Double.valueOf(strCell);strCell=new DecimalFormat("#.00").format(dbCell*100)+"%";}catch(NumberFormatException e){}                  }grid.setText(strCell.matches("\\w*\\.0") ? strCell.substring(0, strCell.length() - 2) : strCell);grids.add(grid);}}BufferedImage image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);Graphics2D g2d = image.createGraphics();// 平滑字体g2d.setRenderingHint(SunHints.KEY_ANTIALIASING, SunHints.VALUE_ANTIALIAS_OFF);g2d.setRenderingHint(SunHints.KEY_TEXT_ANTIALIASING, SunHints.VALUE_TEXT_ANTIALIAS_DEFAULT);g2d.setRenderingHint(SunHints.KEY_STROKE_CONTROL, SunHints.VALUE_STROKE_DEFAULT);g2d.setRenderingHint(SunHints.KEY_TEXT_ANTIALIAS_LCD_CONTRAST, 140);g2d.setRenderingHint(SunHints.KEY_FRACTIONALMETRICS, SunHints.VALUE_FRACTIONALMETRICS_OFF);g2d.setRenderingHint(SunHints.KEY_RENDERING, SunHints.VALUE_RENDER_DEFAULT);g2d.setColor(Color.white);g2d.fillRect(0, 0, imageWidth, imageHeight);// 绘制表格for (Grid g : grids) {if (!g.isShow())continue;// 绘制背景色g2d.setColor(g.getBgColor() == null ? Color.white : g.getBgColor());g2d.fillRect(g.getX(), g.getY(), g.getWidth(), g.getHeight());// 绘制边框g2d.setColor(Color.black);g2d.setStroke(new BasicStroke(1));g2d.drawRect(g.getX(), g.getY(), g.getWidth(), g.getHeight());// 绘制文字,居中显示g2d.setColor(g.getFtColor());Font font = g.getFont();FontMetrics fm = g2d.getFontMetrics(font);int strWidth = fm.stringWidth(g.getText());// 获取将要绘制的文字宽度g2d.setFont(font);g2d.drawString(g.getText(),g.getX() + (g.getWidth() - strWidth) / 2,g.getY() + (g.getHeight() - font.getSize()) / 2 + font.getSize());}g2d.dispose();ImageIO.write(image, "png", new File("D:/ddd/testBDg.png"));System.out.println("Output to PNG file Success!");}/*** 判断Excel中的单元格是否为合并单元格* * @param row* @param col* @param rangeAddress* @return 如果不是合并单元格返回{-1,-1},如果是合并单元格并且是一个单元格返回{lastRow,lastCol},*         如果是合并单元格并且不是第一个格子返回{0,0}*/private static int[] isInMerged(int row, int col, List<CellRangeAddress> rangeAddress) {int[] isInMergedStatus = { -1, -1 };for (CellRangeAddress cra : rangeAddress) {if (row == cra.getFirstRow() && col == cra.getFirstColumn()) {isInMergedStatus[0] = cra.getLastRow();isInMergedStatus[1] = cra.getLastColumn();return isInMergedStatus;}if (row >= cra.getFirstRow() && row <= cra.getLastRow()) {if (col >= cra.getFirstColumn() && col <= cra.getLastColumn()) {isInMergedStatus[0] = 0;isInMergedStatus[1] = 0;return isInMergedStatus;}}}return isInMergedStatus;}}

取png

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;import java.io.*;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;/*** @auth zwx* @desciption 利用poi 读取 写出图片操作。* @Date 16:33 2018/12/4*/
public class PoiExercise {public static void main(String[] args) throws Exception {PngUtile("D:/ddd/text3.xlsx","hellow","D:/ddd/");}public static void PngUtile(String FilePath,String newFileName,String ImgFilePath)throws Exception {// 创建文件File file = new File(FilePath);// 创建流InputStream input = new FileInputStream(file);// 获取文件后缀名String fileExt = file.getName().substring(file.getName().lastIndexOf(".") + 1);// 创建WorkbookWorkbook wb = null;// 创建sheetSheet sheet = null;// 根据后缀判断03,07if (fileExt.equals("xls")) {wb = (HSSFWorkbook) WorkbookFactory.create(input);} else {wb = new XSSFWorkbook(input);}// 获取excel sheet总数int sheetNumbers = wb.getNumberOfSheets();// sheet listList<Map<String, PictureData>> sheetList = new ArrayList<Map<String, PictureData>>();if (fileExt.equals("xls")) {// 循环sheetfor (int i = 0; i < sheetNumbers; i++) {sheet = wb.getSheetAt(i);// map等待存储excel图片Map<String, PictureData> sheetIndexPicMap = null;sheetIndexPicMap = getSheetPictrues03(i, (HSSFSheet) sheet,(HSSFWorkbook) wb);// 将当前sheet图片map存入listsheetList.add(sheetIndexPicMap);}// printImg(sheetList, "d:/saveFile/pic/");} else {getSheetPic07(ImgFilePath, (XSSFSheet) sheet,(XSSFWorkbook) wb,newFileName);}}public static Map<String, PictureData> getSheetPictrues03(int sheetNum,HSSFSheet sheet, HSSFWorkbook workbook) {Map<String, PictureData> sheetIndexPicMap = new HashMap<String, PictureData>();List<HSSFPictureData> pictures = workbook.getAllPictures();if (pictures.size() != 0) {HSSFPatriarch hssPatriarch = sheet.getDrawingPatriarch();if (hssPatriarch != null) {for (HSSFShape shape : hssPatriarch.getChildren()) {HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor();if (shape instanceof HSSFPicture) {HSSFPicture pic = (HSSFPicture) shape;int pictureIndex = pic.getPictureIndex() - 1;HSSFPictureData picData = pictures.get(pictureIndex);//行列下标都是从0开始的,//这里行数加+1,第一张图片信息行数不准确,测试下就知道了String picIndex = "sheet" + String.valueOf(sheetNum)+ "_[" + String.valueOf(anchor.getRow1()+1)+"," + String.valueOf(anchor.getCol1())+ "]_["+ String.valueOf(anchor.getRow2()+1)+"," + String.valueOf(anchor.getCol2())+"]";sheetIndexPicMap.put(picIndex, picData);}}}return sheetIndexPicMap;} else {return null;}}public static void printImg(List<Map<String, PictureData>> sheetList,String filePath) throws IOException {for (Map<String, PictureData> map : sheetList) {Object key[] = map.keySet().toArray();for (int i = 0; i < map.size(); i++) {// 获取图片流PictureData pic = map.get(key[i]);// 获取图片索引String picName = key[i].toString();// 获取图片格式String ext = pic.suggestFileExtension();byte[] data = pic.getData();FileOutputStream out = new FileOutputStream(filePath + picName+ "." + ext);out.write(data);out.close();}}}public static void getSheetPic07(String filePath, XSSFSheet sheet,XSSFWorkbook workbook,String newFileName) throws Exception {List<XSSFPictureData> pictures = workbook.getAllPictures();Map<String, XSSFPictureData> map = new HashMap<String, XSSFPictureData>();System.out.println(pictures.size());for (int i = 0; i < pictures.size(); i++) {XSSFPictureData pictureData = pictures.get(i);byte[] data = pictureData.getData();String ext = pictureData.suggestFileExtension();FileOutputStream out = new FileOutputStream(filePath + newFileName + i+ "." + ext);out.write(data);out.close(); }}
}

User 自定义类

 import java.awt.Color;import org.apache.poi.ss.usermodel.Cell;public class UserCell implements Comparable<UserCell>{private Cell cell;private int row;private int col;private boolean show;private String text="";private Color   color=null;public Cell getCell() {return cell;}public void setCell(Cell cell) {this.cell = cell;}public int getRow() {return row;}public void setRow(int row) {this.row = row;}public int getCol() {return col;}public void setCol(int col) {this.col = col;}public boolean isShow() {return show;}public void setShow(boolean show) {this.show = show;}public String getText() {return text;}public void setText(String text) {this.text = text;}public Color getColor() {return color;}public void setColor(Color color) {this.color = color;}@Overridepublic int compareTo(UserCell uc) {try{double meDouble=Double.parseDouble(this.getText().replaceAll("%", ""));double heDouble=Double.parseDouble(uc.getText().replaceAll("%", ""));if(meDouble<heDouble)return - 1;else if(meDouble>heDouble)return  1;}catch(Exception e){}return  0;}}
import java.awt.Color;
import java.awt.Font;import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.xssf.usermodel.XSSFColor;
public class Grid {private boolean show;private int row;    //对应Excel中的row,也可以理解为cells[i][j]的iprivate int col;    //对应Excel中的col,也可以理解为cells[i][j]的jprivate int x;  //x坐标private int y;  //y坐标private int width;private int height;private String text;private java.awt.Font font=new Font("微软雅黑",Font.PLAIN, 12);private java.awt.Color bgColor=null;private java.awt.Color ftColor=null;public int getRow() {return row;}public void setRow(int row) {this.row = row;}public int getCol() {return col;}public void setCol(int col) {this.col = col;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public boolean isShow() {return show;}public void setShow(boolean show) {this.show = show;}public int getWidth() {return width;}public void setWidth(int width) {this.width = width;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public String getText() {return text;}public void setText(String text) {this.text = text;}public Color getBgColor() {return bgColor;}/*** 将poi.ss.usermodel.Color 转换成  java.awt.Color* <a href="http://home.cnblogs.com/u/309701/" target="_blank">@param</a> color*/public void setBgColor(org.apache.poi.ss.usermodel.Color color) {this.bgColor=poiColor2awtColor(color);}public void setBgColor(java.awt.Color color){this.bgColor=color;}public Color getFtColor() {return ftColor;}public void setFtColor(org.apache.poi.ss.usermodel.Color color) {this.ftColor = poiColor2awtColor(color);}public Font getFont() {return font;}public void setFont(org.apache.poi.ss.usermodel.Font font) {if(font!=null){this.font=new java.awt.Font(font.getFontName(),Font.BOLD,font.getFontHeight()/ 20+  2);           }}private java.awt.Color poiColor2awtColor(org.apache.poi.ss.usermodel.Color color){     java.awt.Color awtColor=null;if(color instanceof XSSFColor){     //.xlsxXSSFColor xc=(XSSFColor) color;String rgbHex=xc.getARGBHex();if(rgbHex!=null){awtColor=new Color(Integer.parseInt(rgbHex.substring(  2),  16));}}else if(color instanceof HSSFColor){   //.xlsHSSFColor hc=(HSSFColor) color;short[] s=hc.getTriplet();if(s!=null){awtColor=new Color(s[  0],s[  1],s[  2]);}}return awtColor;}
}

最后合起来将取出来的简称PPT

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.sl.usermodel.PictureData.PictureType;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFPictureData;
import org.apache.poi.xslf.usermodel.XSLFPictureShape;
import org.apache.poi.xslf.usermodel.XSLFSlide;public class AddingImageToPPT {public static void main(String args[]) throws IOException, InvalidFormatException {/** 文件路径 **/ String filePath = "D:/ddd/testPng.pptx";String imagePath = "D://ddd//testBg.png";String imagePath2 = "D://ddd//test.png";String imagePath3 = "D://ddd//test.png";/** 加载PPT **/XMLSlideShow ppt = new XMLSlideShow(new FileInputStream(filePath));/** 创建一个slide,理解为PPT里的每一页 **/XSLFSlide slide = ppt.createSlide();
//          XSLFSlide slide2 = ppt.createSlide();XSLFSlide slide3 = ppt.createSlide();/** 生成二进制数组 **/byte[] pictureData = IOUtils.toByteArray(new FileInputStream(imagePath));byte[] pictureData2 = IOUtils.toByteArray(new FileInputStream(imagePath2));byte[] pictureData3 = IOUtils.toByteArray(new FileInputStream(imagePath3));/** 添加图片,返回索引 **/XSLFPictureData pictureIndex =  ppt.addPicture(pictureData,PictureType.PNG);XSLFPictureData pictureIndex2 =  ppt.addPicture(pictureData2, PictureType.PNG);XSLFPictureData pictureIndex3 =  ppt.addPicture(pictureData3, PictureType.PNG);/** 打印信息 **/System.out.println("pictureIndex " + pictureIndex);// pictureIndex   0System.out.println("pictureIndex2 " + pictureIndex2);//  pictureIndex2  1System.out.println("pictureIndex3 " + pictureIndex3);//  pictureIndex3  2/** 创建图片 **/
//          XSLFPictureShape pictureShape = slide.createPicture(pictureIndex);XSLFPictureShape pictureShape2 = slide.createPicture(pictureIndex2);XSLFPictureShape pictureShape3 = slide.createPicture(pictureIndex3);/** 设置图片的位置 四个参数分别为 x y width height  **/
//          pictureShape.setAnchor(new java.awt.Rectangle(2, 16,500,100));pictureShape2.setAnchor(new java.awt.Rectangle(2, 16, 500, 250));pictureShape3.setAnchor(new java.awt.Rectangle(2, 266, 500,250 ));/** 获取图片类别 **/
//          PictureType pictureType = pictureShape.getPictureData().getType();//           switch (pictureType){
//              case JPEG:
//                  System.out.println("the type of picture is : " + "JPEG");
//                  break;
//              case PNG:
//                  System.out.println("the type of picture is :" + "PNG");
//                  break;
//          }//         System.out.println(pictureType);/** 输出文件 **/ppt.write(new FileOutputStream(filePath));}
}

利用POI 从Excel取图,自动制作PPT相关推荐

  1. 【web开发】☆★之利用POI操作Excel表格系列教程【6】遍历工作簙行和列取值

    [web开发]☆★之利用POI操作Excel表格系列教程[6]遍历工作簙行和列取值 package com.xiaoye.demo; import java.io.FileInputStream; i ...

  2. 蓄力-利用POI进行excel的导入导出(包含图片)

    这里写自定义目录标题 利用POI进行excel的导入导出 引入的jar包 excel导入 主方法: 将excel里面的图片转成数据 xls格式 xlsx格式 将图片数据转成字节流的方式传输到FTP服务 ...

  3. Springboot利用poi导出excel下载

    Springboot利用poi导出excel下载 因为项目中之前的做法是用反射获取属性,所以demo中也是用的反射,我看网上很多文章都是存入一个List中,不知道这两种哪种更何合适一点,或者有什么更好 ...

  4. java利用poi导出excel功能-附带图片导出

    java利用poi导出excel功能-附带图片导出 写在前面 最近刚离职,闲来无事,于是把上两家公司都有碰到过的需求但都没有去研究实现:即导出带图片的excel报表.于是就折腾了一下这个功能,研究出来 ...

  5. 利用poi 读取excel通用工具类

    poi excel导出通用工具 | 这一行是废话 根据上一篇利用poi 导出excel通用工具类去年写的一个工具类,同样根据业务需求重新封装了一个读excel 工具类,感觉还算通用,分享到博客,欢迎各 ...

  6. java利用poi实现Excel考勤报表的输出

    java利用poi实现Excel考勤报表的输出 实现效果 SXSSFWorkbook超大数据导出 标题.表头.内容有样式 可以多个sheet(满65535行数据换新的sheet) 一度为快 maven ...

  7. java excel 边框_【web开发】☆★之利用POI操作Excel表格系列教程【9】单元格边框处理...

    [web开发]☆★之利用POI操作Excel表格系列教程[9]单元格边框处理 package csg.xiaoye.poidemo; import java.io.FileOutputStream; ...

  8. 利用POI生成EXCEL报表(通过web页面导出后台数据)

    很多时候需要将数据利用浏览器进行导出,这个时候我们就可以采用Apache的POI进行实现通过web页面实现Excel导出后台数据,并且以.xlsx的形式下载到本地,也就是excel表格形式. 首先先下 ...

  9. 利用POI读取excel文件(java)

    利用POI读取excel文件(java) 摘要:利用java读取excel文件,读取文件并获取文件中每一个sheet中的值. 一.需要提前导入的包: import java.io.File;impor ...

最新文章

  1. 如何限制oracle数据库表的输出记录条数
  2. 关于.NET前后台提示框的那点事
  3. 行政区村界线_工作动态 | 龟山镇召开村级行政区域界线勘定工作暨民政业务培训会议...
  4. poj1741 Tree 点分治
  5. python小学生课本剧_二年级上学期课本剧
  6. python-pass
  7. node+express项目链接MySQL数据库(最简单版)
  8. 哈佛大学单细胞课程|笔记汇总(1-9)
  9. [leetcode] Power of Two 判断一个数是否是2的平方
  10. mysql questions_sql_mysql
  11. 云鹊医怎么快速认证_兴趣认证怎么申请?掌握这9个小技巧,快速通过
  12. 计算机网络原理精讲学习笔记
  13. 【matlab】拉普拉斯变换与反变换
  14. Crackme 23
  15. MFC中模拟按钮控件BN_CLICKED消息事件
  16. python 预编译加速_Python加速
  17. Java Email-----使用Java程序实现收发电子邮件
  18. swift 中使用 Alamofire+Moya+ObjectMapper,并做了一些功能封装
  19. C++学习笔记之数字输入及错误处理
  20. Ubuntu16.04+caffe+DIGITS的安装配置指南

热门文章

  1. Pepper Potts
  2. Item 28: Understand reference collapsing.
  3. Google Play 隐私策略
  4. 感知自然语言理解(NLU)
  5. mac谷歌上安装xpath扩展程序
  6. 【机器学习】LatLRR
  7. pythoncqt_Librosa常数Q变换(CQT)在谱图的开始和结束处都存在缺陷
  8. AE创意合成海底世界
  9. STM32兴趣篇四:STM32F103C8T6工控板与LabVIEW的串口通讯实例
  10. nano里安装向日葵远程软件