Java怎样处理EXCEL的读取

须要包:poi-3.5.jar、poi-ooxml-3.5.jar

 

实例:

[java] view plaincopy
  1. public class ProcessExcel {  
  2.   
  3.     private Workbook wb = null;  
  4.     private Sheet s = null;  
  5.     private Row row = null;  
  6.   
  7.     public ProcessExcel(String filePath) {  
  8.         try {  
  9.             System.out.println(filePath);  
  10.             if (filePath.endsWith("xls")) {  
  11.                 wb =  new HSSFWorkbook(new FileInputStream(new File(filePath)));  
  12.             } else {  
  13.                 wb = new XSSFWorkbook(filePath);  
  14.             }  
  15.             System.out.println(wb);  
  16.         } catch (IOException e) {  
  17.             e.printStackTrace();  
  18.         }  
  19.     }  
  20.   
  21.     /** 
  22.      * 表格表2-27-1 院(系)教学效果——本科生学科竞赛获奖情况 (TBL_DEPART_SUBJECT_HONOR)  
  23.      * 
  24.      * @param isInsert 
  25.      */  
  26.     public ExcelModel importExcel3281() {  
  27.         ExcelModel em = new ExcelModel();  
  28.         List<TblDepartSubjectHonor> list = new ArrayList<TblDepartSubjectHonor>();  
  29.         TblDepartSubjectHonor eb = null;  
  30.         s = wb.getSheetAt(0);  
  31.         for (int i = 2; i < s.getPhysicalNumberOfRows(); i++) {  
  32.             for (int j = 0; j < 7; j++) {  
  33.                 if (s.getRow(i).getCell(j) == null) {  
  34.                     em.setState("第" + (i + 1) + "行第" + (j + 1)  
  35.                             + "列为空值,请检查好再导入.");  
  36.                     return em;  
  37.                 }  
  38.             }  
  39.         }  
  40.   
  41.         for (int i = 2; i < s.getPhysicalNumberOfRows(); i++) {  
  42.             eb = new TblDepartSubjectHonor();  
  43.             row = s.getRow(i);  
  44.             eb.setHjxm(row.getCell(0).toString());// 获取项目  
  45.             eb.setJlmc(StringUtils.trim(row.getCell(1).toString()));  
  46.             String JB = StringUtils.trim(row.getCell(2).toString());  
  47.             if (JB.equals("国家级")) {  
  48.                 eb.setJb("01");  
  49.             } else if (JB.equals("省级")) {  
  50.                 eb.setJb("02");  
  51.             } else if (JB.equals("市级")) {  
  52.                 eb.setJb("03");  
  53.             } else {  
  54.                 eb.setJb("04");  
  55.             }  
  56.             eb.setDj(StringUtils.trim(row.getCell(3).toString()));  
  57.             eb.setSydw(StringUtils.trim(row.getCell(4).toString()));  
  58.             eb.setHjzxm(StringUtils.trim(row.getCell(5).toString()));  
  59.             eb.setZdls(StringUtils.trim(row.getCell(6).toString()));  
  60.             String HDNF = StringUtils.trim(row.getCell(7).toString());  
  61.             // 数字处理问题!  
  62.             int l = HDNF.indexOf(".");  
  63.             if (l == -1) {  
  64.                 l = HDNF.length();  
  65.             }  
  66.             eb.setHdnf(HDNF.substring(0, l));  
  67.             list.add(eb);  
  68.         }  
  69.         em.setDatas(list);  
  70.         return em;  
  71.     }  
  72. }  

构造函数是静态初始化块,读取  文件路径+文件名称  依据后缀的不同创建不同的对象。

ProcessExcel的处理过程就是读取Excel的特定行,特定列,然后把数据转化为实体类对象。再将这个对象赋给List,然后 在DAO层採用批处理将数据插入到数据库中。

ExcelModel  类的结构例如以下:

[java] view plaincopy
  1. import java.util.List;  
  2.   
  3. public class ExcelModel {  
  4.     public List datas;  
  5.     public String state;  
  6.     public List getDatas() {  
  7.         return datas;  
  8.     }  
  9.     public void setDatas(List datas) {  
  10.         this.datas = datas;  
  11.     }  
  12.     public String getState() {  
  13.         return state;  
  14.     }  
  15.     public void setState(String state) {  
  16.         this.state = state;  
  17.     }  
  18. }  


 

为什么还要又一次定义一个类来做为返回的參数,而不直接使用List对象接受返回对象列表呢?

这相当于ADTs(抽象对象模型)。把与处理Excel的相关信息封装起来,比方说这个对象不仅有数据对象列表,还有状态信息,假设读取Excel时,Excel数据填入向不合法呢。这个状态信息就能够向用户 ,当然不仅仅限制与这两个数据成员,当我们还须要其它处理Excel的相关信息的时候都能够向这个Excel里面加入数据成员来进行扩展.

 

POI操作Excel经常用法总结

 

一、 POI简单介绍

Apache POI是Apache软件基金会的开放源代码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

二、 HSSF概况

HSSF 是Horrible SpreadSheet Format的缩写。通过HSSF,你能够用纯Java代码来读取、写入、改动Excel文件。

HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。

三、 POI EXCEL文档结构类

HSSFWorkbook excel文档对象

HSSFSheet excel的sheet HSSFRow excel的行

HSSFCell excel的单元格 HSSFFont excel字体

HSSFName 名称 HSSFDataFormat 日期格式

HSSFHeader sheet头

HSSFFooter sheet尾

HSSFCellStyle cell样式

HSSFDateUtil 日期

HSSFPrintSetup 打印

HSSFErrorConstants 错误信息表

四、 EXCEL经常使用操作方法

1、 得到Excel经常使用对象

  1.  
  2. POIFSFileSystem fs=newPOIFSFileSystem(new      FileInputStream("d:\test.xls"));
  1.  
  2. //得到Excel工作簿对象
  1.  
  2. HSSFWorkbook wb = new HSSFWorkbook(fs);
  1.  
  2. //得到Excel工作表对象  
  3. HSSFSheet sheet =      wb.getSheetAt(0);
  1.  
  2. //得到Excel工作表的行
  1.  
  2. HSSFRow      row = sheet.getRow(i);
  1.  
  2. //得到Excel工作表指定行的单元格
  1.  
  2. HSSFCell cell = row.getCell((short) j);
  1.  
  2. cellStyle = cell.getCellStyle();//得到单元格样式

2、建立Excel经常使用对象

  1.  
  2. HSSFWorkbook wb = new HSSFWorkbook();//创建Excel工作簿对象
  1.  
  2. HSSFSheet sheet = wb.createSheet("new      sheet");//创建Excel工作表对象
  1.  
  2. HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行
  1.  
  2. cellStyle = wb.createCellStyle();//创建单元格样式
  1.  
  2. row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格
  1.  
  2. row.createCell((short)0).setCellValue(1); //设置Excel工作表的值
  1.  
  2. 3、设置sheet名称和单元格内容  
    1.   
    2. wb.setSheetName(1,       "第一张工作表",HSSFCell.ENCODING_UTF_16);   
    3. cell.setEncoding((short)       1);  
     
    1.   
    2. cell.setCellValue("单元格内容");        

4、取得sheet的数目

  1.  
  2. wb.getNumberOfSheets()     

5、 依据index取得sheet对象

view plaincopy to clipboardprint?

  1.  
  2. HSSFSheet sheet = wb.getSheetAt(0);

6、取得有效的行数

  1.  
  2. int      rowcount = sheet.getLastRowNum();

7、取得一行的有效单元格个数

  1.  
  2. row.getLastCellNum();     

8、单元格值类型读写

  1.  
  2. cell.setCellType(HSSFCell.CELL_TYPE_STRING); //设置单元格为STRING类型
  1.  
  2. cell.getNumericCellValue();//读取为数值类型的单元格内容

9、设置列宽、行高

  1.  
  2. sheet.setColumnWidth((short)column,(short)width);
  1.  
  2. row.setHeight((short)height);

10、加入区域,合并单元格

  1.  
  2. Region region = new      Region((short)rowFrom,(short)columnFrom,(short)rowTo
  1.  
  2. ,(short)columnTo);//合并从第rowFrom行columnFrom列
  1.  
  2. sheet.addMergedRegion(region);// 到rowTo行columnTo的区域
  1.  
  2. //得到全部区域
  1.  
  2. sheet.getNumMergedRegions()     

11、保存Excel文件

  1.  
  2. FileOutputStream fileOut = new FileOutputStream(path);  
  3. wb.write(fileOut);

12、依据单元格不同属性返回字符串数值

  1.  
[html] view plaincopy
  1. 1.public String getCellStringValue(HSSFCell cell) {   
  2.   2.String cellValue = "";   
  3.   3.switch (cell.getCellType()) {   
  4.   4.case HSSFCell.CELL_TYPE_STRING://字符串类型   
  5.   5.cellValue      = cell.getStringCellValue();   
  6.   6.if(cellValue.trim().equals("")||cellValue.trim().length()<=0)        
  7.   7.cellValue=" ";   
  8.   8.break;   
  9.   9.case HSSFCell.CELL_TYPE_NUMERIC: //数值类型   
  10.   10.cellValue      = String.valueOf(cell.getNumericCellValue());   
  11.   11.break;   
  12.   12.case HSSFCell.CELL_TYPE_FORMULA: //公式   
  13.   13.cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);        
  14.   14.cellValue      = String.valueOf(cell.getNumericCellValue());   
  15.   15.break;   
  16.   16.case HSSFCell.CELL_TYPE_BLANK:   
  17.   17.cellValue=" ";   
  18.   18.break;   
  19.   19.case HSSFCell.CELL_TYPE_BOOLEAN:   
  20.   20.break;   
  21.   21.case HSSFCell.CELL_TYPE_ERROR:   
  22.   22.break;   
  23.   23.default:   
  24.   24.break;   
  25.   25.}        
  26.   26.return cellValue;   
  27.   27.}        


 

  •  

13、经常使用单元格边框格式

  1.  
  2. HSSFCellStyle      style = wb.createCellStyle();
  1.  
  2. style.setBorderBottom(HSSFCellStyle.BORDER_DOTTED);//下边框
  1.  
  2. style.setBorderLeft(HSSFCellStyle.BORDER_DOTTED);//左边框
  1.  
  2. style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框
  1.  
  2. style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框

14、设置字体和内容位置

  1.  
  2. HSSFFont      f = wb.createFont();
  1.  
  2. f.setFontHeightInPoints((short) 11);//字号
  1.  
  2. f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗
  1.  
  2. style.setFont(f);       
  3. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中
  1.  
  2. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
  1.  
  2. style.setRotation(short rotation);//单元格内容的旋转的角度
  1.  
  2. HSSFDataFormat      df = wb.createDataFormat();  
  3. style1.setDataFormat(df.getFormat("0.00%"));//设置单元格数据格式
  1.  
  2. cell.setCellFormula(string);//给单元格设公式
  1.  
  2. style.setRotation(short rotation);//单元格内容的旋转的角度

15、插入图片

  1.  
  2. //先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray
  1.  
  2. ByteArrayOutputStream byteArrayOut = new      ByteArrayOutputStream();
  1.  
  2. BufferedImage bufferImg = ImageIO.read(new      File("ok.jpg"));
  1.  
  2. ImageIO.write(bufferImg,"jpg",byteArrayOut);  
  3. //读进一个excel模版
  1.  
  2. FileInputStream fos = new      FileInputStream(filePathName+"/stencil.xlt");
  1.  
  2. fs = new POIFSFileSystem(fos);
  1.  
  2. //创建一个工作薄  
  3. HSSFWorkbook wb = new      HSSFWorkbook(fs);
  1.  
  2. HSSFSheet      sheet = wb.getSheetAt(0);
  1.  
  2. HSSFPatriarch      patriarch = sheet.createDrawingPatriarch();
  1.  
  2. HSSFClientAnchor anchor = new      HSSFClientAnchor(0,0,1023,255,(short) 0,0,(short)10,10);  
  3. patriarch.createPicture(anchor      ,      wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));     

16、调整工作表位置

  1.  
  2. HSSFWorkbook wb = new HSSFWorkbook();
  1.  
  2. HSSFSheet sheet = wb.createSheet("format      sheet");
  1.  
  2. HSSFPrintSetup      ps = sheet.getPrintSetup();  
  3. sheet.setAutobreaks(true);
  1.  
  2. ps.setFitHeight((short)1);
  1.  
  2. ps.setFitWidth((short)1);

17、设置打印区域

  1.  
  2. HSSFSheet sheet = wb.createSheet("Sheet1");     
  1.  
  2. wb.setPrintArea(0, "$A$1:$C$2");

18、标注脚注

  1.  
  2. HSSFSheet sheet = wb.createSheet("format      sheet");
  1.  
  2. HSSFFooter      footer = sheet.getFooter()
  1.  
  2. footer.setRight( "Page " + HSSFFooter.page() +      " of " + HSSFFooter.numPages() );

19、在工作单中清空行数据。调整行位置

  1.  
  2. HSSFWorkbook wb = new HSSFWorkbook();
  1.  
  2. HSSFSheet sheet = wb.createSheet("row      sheet");
  1.  
  2. //      Create various cells and rows for spreadsheet.
  1.  
  2. //      Shift rows 6 - 11 on the spreadsheet to the top (rows 0 - 5)  
  3. sheet.shiftRows(5, 10, -5);

20、选中指定的工作表

  1.  
  2. HSSFSheet sheet = wb.createSheet("row      sheet");  
  3. heet.setSelected(true);

21、工作表的放大缩小

  1.  
  2. HSSFSheet sheet1 = wb.createSheet("new      sheet");
  1.  
  2. sheet1.setZoom(1,2); // 50 percent magnification

22、头注和脚注

  1.  
  2. HSSFSheet sheet = wb.createSheet("new      sheet");
  1.  
  2. HSSFHeader      header = sheet.getHeader();
  1.  
  2. header.setCenter("Center Header");
  1.  
  2. header.setLeft("Left Header");
  1.  
  2. header.setRight(HSSFHeader.font("Stencil-Normal",      "Italic") +
  1.  
  2. HSSFHeader.fontSize((short) 16) + "Right w/ Stencil-Normal      Italic font and size 16");

23、自己定义颜色

  1.  
  2. HSSFCellStyle      style = wb.createCellStyle();
  1.  
  2. style.setFillForegroundColor(HSSFColor.LIME.index);     
  1.  
  2. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);     
  1.  
  2. HSSFFont      font = wb.createFont();
  1.  
  2. font.setColor(HSSFColor.RED.index);     
  1.  
  2. style.setFont(font);       
  3. cell.setCellStyle(style);

24、填充和颜色设置

  1.  
  2. HSSFCellStyle      style = wb.createCellStyle();
  1.  
  2. style.setFillBackgroundColor(HSSFColor.AQUA.index);     
  1.  
  2. style.setFillPattern(HSSFCellStyle.BIG_SPOTS);     
  1.  
  2. HSSFCell cell = row.createCell((short) 1);
  1.  
  2. cell.setCellValue("X");
  1.  
  2. style      = wb.createCellStyle();
  1.  
  2. style.setFillForegroundColor(HSSFColor.ORANGE.index);     
  1.  
  2. style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);     
  1.  
  2. cell.setCellStyle(style);     

25、强行刷新单元格公式

  1.  
  2. HSSFFormulaEvaluator eval=new      HSSFFormulaEvaluator((HSSFWorkbook) wb);
  1.  
  2. private static void updateFormula(Workbook wb,Sheet s,int row){
  1.  
  2. Row      r=s.getRow(row);
  1.  
  2. Cell c=null;
  1.  
  2. FormulaEcaluator eval=null;
  1.  
  2. if(wb instanceof HSSFWorkbook)
  1.  
  2. eval=new HSSFFormulaEvaluator((HSSFWorkbook) wb);
  1.  
  2. else if(wb instanceof XSSFWorkbook)
  1.  
  2. eval=new XSSFFormulaEvaluator((XSSFWorkbook) wb);
  1.  
  2. for(int i=r.getFirstCellNum();i<r.getLastCellNum();i++){  
  3. c=r.getCell(i);  
  4. if(c.getCellType()==Cell.CELL_TYPE_FORMULA)     
  1.  
  2. eval.evaluateFormulaCell(c);     
  1.  
  2. }       
  3. }

说明:FormulaEvaluator提供了evaluateFormulaCell(Cell cell)方法,计算公式保存结果,但不改变公式。而evaluateInCell(Cell cell) 方法是计算公式。并将原公式替换为计算结果,也就是说该单元格的类型不在是Cell.CELL_TYPE_FORMULA而是Cell.CELL_TYPE_NUMBERIC。HSSFFormulaEvaluator提供了静态方法evaluateAllFormulaCells(HSSFWorkbook wb) ,计算一个Excel文件的全部公式,用起来非常方便。

转载于:https://www.cnblogs.com/mfrbuaa/p/5412096.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#替换字符串起始/结尾指定的字符串

#region 替换字符串起始位置(开头)中指定的字符串/// <summary> /// 替换字符串起始位置(开头)中指定的字符串 /// </summary> /// <param name"s">源串</param> /// <param name"searchStr">查找的串</param> /…

腐蚀函数cvErode 和 膨胀函数cvDilate

Erode腐蚀&#xff0c; Dilate膨胀&#xff0c;这两个形态学函数总是成对出现&#xff0c;前者可以消除较小的点如噪音&#xff0c;后者可以使不连通的图像合并成块。 void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* elementNULL, int iterations1 ); void cvDi…

spring cloud gateway的stripPrefix配置

序 本文主要研究下spring cloud gateway的stripPrefix配置 使用zuul的配置 zuul:routes:demo:sensitiveHeaders: Access-Control-Allow-Origin,Access-Control-Allow-Methods path: /demo/**stripPrefix: trueurl: http://demo.com.cn/ 复制代码这里的stripPrefix默认为true…

Zookeeper和分布式环境中的假死脑裂问题(转)

Zookeeper和分布式环境中的假死脑裂问题 最近和同事聊天无意间发现他们的系统也存在脑裂的问题。想想当初在我们的系统中为了解决脑裂花了非常大的功夫&#xff0c;现在和大家一起讨论下脑裂&#xff0c;假死等等这些问题和解决的方法。 在一个大集群中往往会有一个master存在…

【pyqt5学习】【python学习】——通过py文件来执行命令行指令

目录 1、利用os模块 2、爬虫命令 注意 1、利用os模块 os.system("scrapy crawl search") 2、爬虫命令 from scrapy.cmdline import execute # 将命令的每个单词存进一个列表传给execute() execute("scrapy crawl search".split()) # 相当于在终端…

JSP内置对象详解

转自http://www.cnblogs.com/oumyye/p/4240272.html   在JSP中为了简化用户的开发&#xff0c;提供了九个内置对象&#xff0c;这些内置对象将由容器为用户进行实例化&#xff0c;而用户直接使用即可&#xff0c;而不用像在java中那样&#xff0c;必须通过关键字new进行实例化…

cvMorphology形态学原理解析及源码分析

⑴ 图像形态学处理的概念...1 ⑵ 二值图像的逻辑运算...3 ⑶ 膨胀和腐蚀...4 (4) 高级形态学变换...8 (5) 细化...10 ⑴ 图像形态学处理的概念 数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量&#xff0c;比如边…

安全

2019独角兽企业重金招聘Python工程师标准>>> 1、不要使用页面变量进行传递值&#xff0c;用session 转载于:https://my.oschina.net/u/2277088/blog/1621841

lua_string_pattern

两大特点&#xff1a; 1. string库中所有的字符索引从前往后是1,2,...;从后往前是-1,-2,... 2. string库中所有的function都不会直接操作字符串&#xff0c;而是返回一个新的字符串。 库函数&#xff1a; 1、string.len&#xff0c;string.rep&#xff0c;string.upper&#xf…

【pyqt5学习】QLayout: Attempting to add QLayout “to ***“, which already has a layout

报错场景&原因 在界面设计时&#xff0c;想实时更新用matplotlib绘制的图像,即会一次次的调用plot函数&#xff0c;这样就会重复地向groupbox里面添加布局&#xff0c;但是一个容器只能有一个布局&#xff0c;因此会报错 def __init__(self):super(weibo_search_logic, se…

3D打印材料PLA,ABS对比

转载于:https://www.cnblogs.com/sztom/p/6373910.html

扒一扒工业机器人编程语言和种类

机器人编程语言&#xff08;一&#xff09; 伴随着机器人的发展&#xff0c;机器人语言也得到发展和完善。机器人语言已成为机器人技术的一个重要部分。机器人的功能除了依靠机器人硬件的支持外&#xff0c;相当一部分依赖机器人语言来完成。早期的机器人由于功能单一&#xff…

Java继承概述以及Java继承案例和继承的好处

Java继承概述 1.多个类中存在相同属性和行为时&#xff0c;将这些内容抽取到单独一个类中&#xff0c;那么多个类无需再定义这些相同属性和行为&#xff0c;只要继承那个类即可。 2.在Java中通过extends关键字可以实现类与类的继承。 例如&#xff1a;class 子类名 extends 父类…

描述用户场景

每一个组员根据自己所承担的项目&#xff0c;描绘用户场景并将典型用户和用户场景描述&#xff01; 典型用户 ①当代大学生们&#xff0c;我们的收入多数是来自家庭父母给的生活费&#xff0c;或者还包括一些自己打工挣的零块。收入也就这么几个来源&#xff0c;但是支出却多种…

【pyqt5学习】——控件绑定槽函数的同时利用lambda实现传参

两种方法&#xff1a; 1、利用pyqtsignal的emit进行传参 2、connect函数进行传参 self.pushButton.clicked.connect(lambda:self.readZodiacByButtonText(self.pushButton.text())) # 根据按钮上的文字来进行阅读def readZodiacByButtonText(self,text):if self.language &…

如何用MaskBlt实现两个位图的合并,从而实现背景透明

我有两个位图&#xff0c;一个前景图&#xff0c;一个背景图&#xff08;mask用途&#xff09;。请问如何用MaskBlt实现两个位图的合并&#xff0c;从而实现背景透明&#xff01; 核心代码&#xff1a;dcImage.SetBkColor(crColour);dcMask.BitBlt(0, 0, nWidth, nHeight, &…

史陶比尔与机器人之父

早在1982年&#xff0c;史陶比尔已经成立了工业机器人部门&#xff0c;经销美国UNIMATION公司的PUMA机器人&#xff0c;1988年&#xff0c;史陶比尔成功收购了 UNIMATION。而UNIMATION是世界上最著名的机器人专家恩格尔伯格所创立的企业&#xff0c;PUMA正是世界上第一台工业机…

git进阶

Git 进阶用法 Git 高阶用法 1. 基本概念 你的本地仓库由Git维护的三棵树组成。第一个是你的工作目录&#xff0c;它持有实际文件&#xff1b; 第二个是缓存区(index),它像个缓存区域&#xff0c;临时保存您的改动&#xff1b;最后是HEAD,指向你最近 一次提交后的结果。 git add…

lab3

lamp: 在阿里云linux&#xff08;Ubuntu&#xff09;上安装Apache mysql php &#xff1a; apt-get install mysql_server mysql_client php5 php_mysql apache2 系统会提示正确的包的名称 安装ECShop 在本地命令行 scp ecshop.zip rootxxx.xxx.xx.xxx:/var/www/ 把压缩文件拷贝…

【python学习】——pyttsx3库实现文本朗读、音量、音速等调节

import pyttsx3# 初始化朗读引擎 engine pyttsx3.init() # 设置朗读速度 self.engine.setProperty(rate, 120) # text为需要读取的内容 self.engine.say(text) # 不添加下面这句&#xff0c;没有声音 self.engine.runAndWait()pyttsx3其他应用&#xff1a; python pyttsx3实现…