Qt5操作Office及Word读写实例

news2024/12/23 18:49:08

欢迎小伙伴的点评✨✨,相互学习🚀🚀🚀
博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀

文章目录

  • 前言
  • 一、Qt操作Office的基本方式
    • 1.1、QAxObject对象访问
      • 1.1.1、操作Excel的基本流程
      • 1.1.2、操作Word的基本流程
  • 二、AxWidget界面显示
  • 三、Qt 对 Office 的基本读写
    • 3.1、程序界面
    • 3.2、效果实例
    • 3.3、原码解析
      • mainwindow.h
      • main.cpp
      • mainwindow.cpp
  • 总结


前言

本节将会给大家带来Qt连接Office读写及Word读写的实例


一、Qt操作Office的基本方式

与其他高级语言平台一样, Qt 也提供了访问 Office 文档的功能,可实现对 Mircosoft Office
套件(包括 Excel 、 Word 等)的访问和灵活操作。
Qt 可在程序中直接操作读写 Office 中的数据,也可以通过控件将 Office 文档中的数据显示
在应用程序图形界面上供用户预览。

QAxObject 是 Qt 提供给程序员从代码中访问 Office 的对象类,其本质上是一个面向微软操作系统的 COM 接口,它操作 Excel 和 Word 的基本流程分别如下图所示。 QAxObject将所有 Office 的工作簿、表格、文档等都作为其子对象,程序员通过调用 querySubObject()这个统一的方法来获取各个子对象的实例,再用 dynamicCall()方法执行各对象上的具体操作。
为了能在 Qt 项目中使用 QAxObject 和 QAxWidget 对象,对于每个需要操作 Office 的 Qt 程
序项目都要进行配置,在项目的 .pro 文件中添力语句如下

QT       +=axcontainer

图示如下
在这里插入图片描述

1.1、QAxObject对象访问

1.1.1、操作Excel的基本流程

Excel.Application(创建Excel进程) WorkBooks(工作薄集) WorkBook(工作薄) Sheets(表格集) querySubObject(1){ 访问文档 xx.xls } querySubObject(2){ 访问表 Sheets } querySubObject(3){ 访问表单元格 cell } Excel.Application(创建Excel进程) WorkBooks(工作薄集) WorkBook(工作薄) Sheets(表格集)

(1) 启动Excel进程、获取Excel工作薄集。
创建 Excel 进程使用如下语句:

QAxObject *myexcel = new QAxObject{"Excel.Application");

其中, myexcel 为进程的实例对象名,该名称由用户自己定义,整个程序中引用一致即可。
通过进程获取 Excel 工作簿集,语句为:

QAxObject *myworks = myexcel->querySl.ibObject("WorkBooks");

其中, myworks 是工作簿集的引用,用户可根据需要定义其名称,同样 , 在程序中也要求引用 一致 。
有了 Excel 进程和工作簿集的引用,就可以使用它们对 Excel 进行一系列文档级别的操作,例如:

myworks->dynamicCall("Add");  //添加一个工作簿
myexcel->querySubObject("ActiveWorkBook"); //获取当前活动的工作簿

(2) 获取电子表格集 。
每个 Excel 工作簿中都可以包含若干电子表格 (Sheet), 通过打开的当前工作簿获取其所有电子表格的程序语句为:

QAxObject *mysheets = workbook->querySubObject("Sheets");

其中, workbook 也是一个 QAxObject 对象,引用的是当前正在操作的 一个活动工作簿 。
同理,在获取了电子表格集后,就可以像操作工作簿文档那样,对其中的表格执行各种操作,例如:

mysheets->dynamicCall ("Add");           ///添加一个表格
workbook->querySubObject("ActiveSheet");  //获取工作簿中当前活动表格
sheet->setProperty("Name", "字符串");     //给表格命名

其中, sheet 也是个 QAxObject 对象,代表当前所操作的表格 。
(3) 操作单元格及其数据 。
对 Excel 的操作最终要落实到对某个电子表格单元格中数据信息的读写上,在 Qt 中的 Excel
单元格同样是作为 QAxObject 对象来看待的,对它的操作通过其所在表格的 QAxObject 对象句
柄执行,如下:

QAxObject *cell= sheet->querySubObjec 七 ("Range (QVariant, QVariant)",单元格编号);
cell->dynamicCall("SetValue(const QVariant&)", QVariant("字符串");

这样,就实现了对 Excel 各个级别对象的灵活操作和使用。
为避免资源无谓消耗和程序死锁,通常在编程结束时还必须通过语句释放该 Excel 进程所占据的系统资源,如下:

workbook->dynamicCall("Close()");    //关闭工作薄
myexcel->dynamicCall ("Quit()");     //退出进程

1.1.2、操作Word的基本流程

Word.Application(创建Word进程) Documents(文档集) Doc(文档) querySubObject(1){ 访问文档 xx.doc } querySubObject(2){ 访问 文本 } Word.Application(创建Word进程) Documents(文档集) Doc(文档)

(1) 启动Word 进程、获取Word文档集。
创建 Word 进程使用如下语句:

QAxObject *myword = new QAxObject("Word.Application");

其中, myword 为进程的实例对象名,该名称由用户自己定义,整个程序中引用一致即可。
通过进程获取 Word 文档集,语句为:

QAxObject *mydocs = myword->querySubObject("Documents");

其中, mydocs 是文档集的引用,用户可根据需要定义其名称,同样,在程序中也要求引用一致。
有了 Word 进程和文档集的引用,就可以使用它们对 Word 文档执行操作,例如:

mydocs->dynamicCall("Add(void)");    //添加一个新文档
myword->querySubObject("ActiveDocument");  //获取当前打开的活动文档

(2)获取和操作当前选中的段落。
一个 Word 文档由若干文本段落构成,通过文档句柄可对当前选中的段落执行特定的操作,如下:

QAxObject *paragraph= myword->querySubObject("Selection");

其中, paragraph 是一个 QAxObject 对象,引用的是当前所选中将要对其执行操作的 一个段落文本。
下面举两个操作 Word 文档段落的语句,如下:

paragraph->dynamicCall("TypeText(const QString&)", "字符串");  //写入文本字符串
paragraph = document->querySubObject("Range()");  //获取文本
QString str = paragraph->property("Text") .toString();  //读出文本字符串

其中, document 是 一个表示当前活动文档的 QAxObject 对象。
同样,在使用完 Word 文档之后也要进行释放资源和关闭进程的善后处理,如下:

document->dynamicCall("Close()");   //关闭文档
myword->dynamicCall("Quit()");     //退出进程

二、AxWidget界面显示

除用程序代码中的 QAxObject 对象直接操作 Office 外, Qt 还支持用户在应用程序界面上实时地显示和预览 Office 文档的内容,这通过 Qt 中的 QAxWidget 对象来实现。它的机制是:将桌面程序界面上的某个 Qt 控件重定义包装为专用于显示 Office 文档的 QAxWidget 对象实例,该实例与用户程序中所启动的特定 Office 进程相关联,就具备了显示外部文档的增强功能,本质上就是用 Qt 的组件调用外部的 Microsoft Office 组件,实际在后台执行功能的仍然是 Microsoft Office 的 COM 组件。例如,将一个 Qt 的标签 (QLabel) 控件绑定到 Excel 进程来显示表格的程序代码如下:

    QAxWidget * mywidget = new QAxWidget("Excel.Application", ui->label);
    mywidget->dynamicCall("SetVisible(bool Visible)", "false");//隐藏不显示 Office 窗体
    mywidget->setProperty("DisplayAlerts", false); //屏蔽 Office 的警告消息框
    mywidget->setGeometry(ui->label->geometry().x() , ui->label->geometry().y(),1000,500); //设置显示区尺寸
    mywidget->setControl("D:\\QT application  code  file\\File_Qt\\Qt5.xls"); //指定要打开的文件名路径
    mywidget->show (); //显示内容

图示
在这里插入图片描述

三、Qt 对 Office 的基本读写

Excel 软件具有完善的电子表格处理和计算功能,可在表格特定行列的单元格上定义公式,对其中的数据进行批量运算处理,用 Qt 操作 Excel 可辅助执行大量原始数据的计算功能,巧妙地借助单元格的运算功能就能极大地减轻 Qt 程序本身的计算负担。 Word 是最为常用的办公软件,很多日常工作资料都是以 Word 文档格式保存的。用 Qt 既可以对 Word 中的文字也可以对表格中的信息进行读写。

3.1、程序界面

创建一个 Qt 桌面应用程序项目, 为了方便对比 Qt 对两种不同类型文档的操作,设计程序界面, Qt 对 Office 基本读写程序界面如下图 所示。
图示
在这里插入图片描述
上图界面上各控件的名称及控件类型

序号控件名称控件类型
1labelQLabel
1lineEditQLineEdit
1pushButtonQPushButton
2label_2QLabel
2lineEdit _2QLineEdit
2pushButton_2QPushButton
3label_3QLabel
3lineEdit_3QLineEdit
3pushButton_3QPushButton
4label_4QLabel
4lineEdit_4QLineEdit
4pushButton_4QPushButton

按钮鼠标右键 “转到槽” 选择 clicked()如下图所示
在这里插入图片描述

在这里插入图片描述
控件如下图所示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2、效果实例

图一
在这里插入图片描述
图二

在这里插入图片描述

3.3、原码解析

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QAxObject>                //访问Office对象类
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();    /*写入数据到Excel单机事件按钮*/
    void on_pushButton_2_clicked();  /*读取Excel单机事件按钮*/
    void on_pushButton_3_clicked();  /*写入数据到Word单机事件按钮*/
    void on_pushButton_4_clicked();  /*读取Word单机事件按钮*/

private:
    Ui::MainWindow *ui;
    /*Excel读写指针*/
    QAxObject *myexcel;      //Excel 应用程序指针
    QAxObject *myworks;      //工作薄集指针
    QAxObject *workbook;     //工作薄指针
    QAxObject *mysheets;     //电子表格集指针

    /*Word读写指针*/
    QAxObject *myword;       //Word应用程序指针
    QAxObject *mydocs;       //文档集指针
    QAxObject *document;     //文档指针
    QAxObject *paragraph;    //文本段指针

};

#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

}

MainWindow::~MainWindow()
{
    delete ui;
}

/*将控件lineEdit写入数据到Excel*/
void MainWindow::on_pushButton_clicked()
{

    myexcel = new QAxObject ("Excel.Application");

    myexcel->dynamicCall("SetVisible(bool Visible)", "false");//隐藏不显示文档窗体
    myexcel->setProperty("DisplayAlerts", false); //屏蔽文档的警告消息框

    myworks = myexcel->querySubObject("WorkBooks");  //获取工作薄集
    myworks->dynamicCall("Add");                     //添加工作薄
    workbook= myexcel->querySubObject("ActiveWorkBook"); //获取当前活动工作薄
    mysheets = workbook->querySubObject("Sheets");  //获取电子表格集

    mysheets->dynamicCall ("Add"); //添加一个表
    QAxObject *sheet= workbook->querySubObject("ActiveSheet");  //指向当前的活动表格
    sheet->setProperty ("Name", "我爱 Qt");                     //给表格命名
    QAxObject *cell= sheet->querySubObject ("Range (QVariant, QVariant) ", "C3"); //指向C3单元格

    QString  inStr = ui->lineEdit->text();    //从lineEdit控件获得数据
    cell->dynamicCall("SetValue(const QVariant&)", QVariant(inStr)); //向单元格写入内容

    sheet= mysheets->querySubObject("Item(int)", 2);  //指向第二个表格
    sheet->setProperty ("Name", "Hello Qt");          //给表格命名
    cell= sheet->querySubObject("Range(QVariant, QVariant)", "B5"); //指向B5单元格
    cell->dynamicCall ("SetValue(const QVariant&)", QVariant ("Hello Qt!"));  //向单元格写入内容
    workbook->dynamicCall("SaveAs(const QString&) ", "D:\\QT application  code  file\\File_Qt\\Qt5.xls");
                                                       //Excel(Qt5.xls)保存到指定路径
    workbook->dynamicCall("Close()"); //关闭
    myexcel->dynamicCall ("Quit()");  //退出
    QMessageBox::information(this, tr("完毕"), tr("Excel 工作表已保存")) ;
    ui->pushButton->setEnabled(false);
    ui->pushButton_2->setEnabled(true);
}

/*从Excel读取数据到lineEdit_2控件*/
void MainWindow::on_pushButton_2_clicked()
{

  myexcel = new QAxObject("Excel.Application");

  myexcel->dynamicCall("SetVisible(bool Visible)", "false");//隐藏不显示文档窗体
  myexcel->setProperty("DisplayAlerts", false); //屏蔽文档的警告消息

  myworks = myexcel->querySubObject("WorkBooks"); //获取工作薄集
  myworks->dynamicCall ("Open(const QString&)","D:\\QT application  code  file\\File_Qt\\Qt5.xls");
                                                           //打开Excel
  workbook= myexcel->querySubObject("ActiveWorkBook");  //获取当前活动工作薄
  mysheets = workbook->querySubObject("WorkSheets");    //获取当前电子表
  QAxObject *sheet= workbook->querySubObject("Sheets(int)", 1); //指向第一个表格
  QAxObject *cell= sheet->querySubObject ("Range (QVariant, QVariant) ", "C3");
  QString outStr = cell->dynamicCall ("Value2()").toString(); //读出C3单元格内容;

  ui->lineEdit_2->setText(outStr);

  sheet= workbook->querySubObject("Sheets(int)", 2); //指向第二个表格

  cell= sheet->querySubObject("Range(QVariant, QVariant)", "B5"); //
  outStr = cell->dynamicCall ("Value2()").toString(); //读出 B5 单元格内容
  workbook->dynamicCall("Close()");
  myexcel->dynamicCall ("Quit()");
  QMessageBox::information(this, tr("消息"), outStr);
  ui->pushButton->setEnabled(true);
  ui->pushButton_2->setEnabled(false);

}


/*将写lineEdit_3控件数据写到Word*/
void MainWindow::on_pushButton_3_clicked()
{
    myword = new QAxObject("Word.Application");

    myword->dynamicCall("SetVisible(bool Visible)", "false");//隐藏不显示文档窗体
    myword->setProperty("DisplayAlerts", false); //屏蔽文档的警告消息

    mydocs = myword->querySubObject("Documents");  //获取文档集
    mydocs->dynamicCall("Add(void)");              //添加一个文档
    document= myword->querySubObject("ActiveDocument"); //指向当前活动文档
    paragraph = myword->querySubObject ("Selection") ; //指向当前选中文本

    QString inStr = ui->lineEdit_3->text();

    paragraph->dynamicCall("TypeText(const QString&)", inStr);
    //写入从界面文本框获取的文本
    paragraph->dynamicCall ("TypeText (const QVariant&) ", QVariant ("\nHello Qt!")) ;
    //写入指定的文本
    document->dynamicCall("SaveAs(const QString&)","D:\\QT application  code  file\\File_Qt\\Qt5.doc");
    //保存文档
    delete paragraph;
    paragraph= nullptr;
    document->dynamicCall("Close()");
    myword->dynamicCall("Quit()");
    QMessageBox::information(this, tr("完毕") , tr("Word 文档己保存")) ;
    ui->pushButton_3->setEnabled(false);
    ui->pushButton_4->setEnabled(true);

}

void MainWindow::on_pushButton_4_clicked()
{
    myword = new QAxObject("Word.Application");

    myword->dynamicCall("SetVisible(bool Visible)", "false"); //隐藏不显示文档的窗体
    myword->setProperty("DisplayAlerts", false); //屏蔽文档的警告消息

    mydocs = myword->querySubObject("Documents"); //获取文档集

    mydocs->dynamicCall("Open(const QString&)","D:\\QT application  code  file\\File_Qt\\Qt5.doc");
                                                       //打开文档
    document= myword->querySubObject("ActiveDocument"); //指向活动文档

    paragraph = document->querySubObject ("Range()"); //指向当前文本
    QString outStr = paragraph->property("Text").toString () ; //读出文本
    ui->lineEdit_4->setText(outStr.split("H").at(0));
    paragraph= document->querySubObject("Range(QVariant, QVariant)", 4, 15);
    /* 由于 Word 文档中共有两行文本,而 Qt 一次性读出的
是所有文本(并不自动分行分段),为了能分行输出,我们运用了 splitO方法分隔以及索引截取
字符串的编程技术。*/
    outStr = paragraph->property("Text").toString();
    delete paragraph;
    paragraph= nullptr;
    document->dynamicCall ("Close()");
    myword->dynamicCall("Quit()");
    QMessageBox::information(this, tr("消息"),outStr) ;
    ui->pushButton_4->setEnabled(false);
    ui->pushButton_3->setEnabled(true);


}

总结

Excel 软件具有完善的电子表格处理和计算功能,可在表格特定行列的单元格上定义公式,对其中的数据进行批量运算处理,用 Qt 操作 Excel 可辅助执行大量原始数据的计算功能,巧妙地借助单元格的运算功能就能极大地减轻 Qt 程序本身的计算负担。
故Qt5操作Office及Word读写在应用开发中是经常用到的。

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

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

相关文章

云超融合数据中心 CloudFabric

大家好&#xff0c;我是技福的小咖老师。 随着云计算、大数据、人工智能等新一代信息技术的快速发展&#xff0c;数字技术已经渗透到我们日常生活的方方面面&#xff0c;同时也改变了所有行业。数据中心&#xff0c;将算力源源不断地输送给数字世界&#xff0c;逐渐成为云计算…

Flink学习28:水位线

1.前言 flink有3种时间&#xff0c;主要是事件时间和处理时间。 水位线主要解决&#xff0c;数据乱序到达或者延迟到达的问题 2.水位线原理 即只有当水位线&#xff0c;越过窗口的结束时间&#xff0c;才会触发窗口计算。 窗口计算需要同时满足两个条件&#xff1a; 1.水位线…

spring之IoC注解

文章目录前言一、回顾注解1、注解怎么定义2、注解怎么使用3、通过反射机制怎么读取注解二、Spring IoC注解式开发原理1、扫描程序2、通过反射机制解析注解3、实例化对象三、声明Bean的注解前言 注解的存在主要是为了简化XML的配置 一、回顾注解 1、注解怎么定义 定义一个注解…

c语言操作符(上)

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言初阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>: 讲解c语言中有关操作符的知识. 金句分享: 最慢的步伐…

Python读取sqlite3数据库中的数据

文章目录1. 简介1.1. 使用1.1.1. 创建1.1.2. 插入1.1.2.1. 插入一条数据1.1.3. 查询1.1.3.1. 查询所有数据查询一条数据1.1.3.2. 读取特定位置的数据1.1.4. 修改数据1.1.5. 删除数据1. 简介 从Python3.x版本开始&#xff0c;在标准库中已经内置了SQLlite3模块&#xff0c;它可…

Redis中的哨兵机制

有了主从复制的实现以后,我们如果想对主从服务器进行监控,那么在redis2.6以后提供了一个 “哨兵” 的机制,在2.6版本中的哨兵为1.0版本,并不稳定,会出现各种各样的向题,在2.8以后的版本哨兵功能才稳定起来。 顾名思义,哨兵的含义就是监控Redis系统的运行状况。其主要功…

STM32/51单片机实训day6——Proteus8.6版本+ STM32F103驱动LCD12864显示Keil5程序设计

内 容&#xff1a;实现LCD显示 学 时&#xff1a;4学时 知识点&#xff1a;LCD12864芯片介绍&#xff0c;读写操作时序&#xff0c;电路设计 重点&#xff1a; 读写操作时序 难点&#xff1a;读写操作时序 时间&#xff1a;2022年12月26日 9:00&#xff5e;11:50 总结&…

全国产龙芯2K0500多功能SoC处理器及其解决方案

龙芯2K0500片内集成单个64位龙架构(LoongArch)LA264处理器核、32KB一级指令缓存、32KB一级数据缓存、512KB二级缓存、32位DDR2/3-1066控制器、2DGPU图形核心、DVO显示接口、两路PCIe2.0、两路SATA2.0、四路USB2.0、一路USB3.0、两路GMAC、PCI总线、彩色黑白打印接口、HDA及其他…

有备无患!DBS高性价比方案助力富途证券备份上云

“某中心受病毒攻击&#xff0c;导致服务中断&#xff0c;线上业务被迫暂停” “某公司员工误操作删库&#xff0c;核心业务数据部分丢失&#xff0c;无法完全找回” “由于服务器断线&#xff0c;某医院信息系统瘫痪近4小时&#xff0c;期间病人无法使用医保卡挂号和结算” …

Talk预告 | 微软高级研究员杨征元:统一的视觉语言模型

本期为TechBeat人工智能社区第467期线上Talk&#xff01; 北京时间12月29日(周四)20:00&#xff0c;微软高级研究员——杨征元的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “统一的视觉语言模型”&#xff0c;届时将从一个统一的角度概述视觉语…

深度循环神经网络

在深度循环神经网络中&#xff0c;隐状态的信息被传递到当前层的下一时间步和下一层的当前时间步。 有许多不同风格的深度循环神经网络&#xff0c; 如长短期记忆网络、门控循环单元、或经典循环神经网络。 这些模型在深度学习框架的高级API中都有涵盖。 总体而言&#xff0c…

第三方库react-redux基础使用 容器UI组件使用 数据管理优化

其实redux并不是React特有的技术 redux是一家独立公司 做出来 适配与目前几大前端主流框架的状态管理工具。 其实 最初 redux也希望码友们用它来管理vue的状态数据 但后面 React官方发现 很多人喜欢在React项目中使用redux 于是 React公司专门做了react-redux这个第三方的库 帮…

【计组】数据通路和流水线设计--《深入浅出计算机组成原理》(三)

课程链接&#xff1a;深入浅出计算机组成原理_组成原理_计算机基础-极客时间 目录 一、建立数据通路 &#xff08;一&#xff09;组合逻辑电路 1、指令周期 2、数据通路 3、CPU所需硬件电路 &#xff08;二&#xff09;时序逻辑电路 1、时序逻辑电路可以解决的问题 二…

Python爬虫进行正则数据解析实战

今天继续给大家介绍Python爬虫相关知识&#xff0c;本文主要内容是Python爬虫进行正则数据解析实战。 一、需求分析 今天&#xff0c;我们尝试使用re正则表达式来对爬取到的页面进行数据解析。需求如下&#xff1a; 针对网页&#xff1a;https://blog.csdn.net/weixin_402282…

第三十二章 数论——组合数详解(1)

第三十二章 数论——组合数的多种求法一、数学基础二、组合数——递推公式1、题目2、思路3、代码三、组合数——快速幂1、问题&#xff1a;2、分析一、数学基础 组合数来自于高中排列组合的知识&#xff1a; 我们从aaa个小球中随机一次性取出bbb个&#xff0c;所有的取法记作…

Numpy学习记录

numpy.ma.ravel 返回一个连续的扁平数组。 参考&#xff1a; numpy中的ravel()方法使用介绍https://blog.csdn.net/weixin_44025103/article/details/125062287 Python numpy.ravel函数方法的使用https://www.cjavapy.com/article/870/ numpy.meshgrid 二维坐标系中,X轴…

图片如何批量重命名?一步一步教会你

爱拍照的小伙伴应该都知道&#xff0c;无论是手机还是相机拍出来的照片&#xff0c;导入电脑后&#xff0c;它的默认名称都是一串长长的字符。不仅让桌面看起来杂乱无章&#xff0c;还会给我们在查找图片时带来诸多的不便。其实我们可以通过软件对这些图片进行批量重命名的&…

线性代数基础----矩阵

秩的理解: 举证的秩的理解: 特征值和特征向量 线性相关和线性无关 向量的拉伸和旋转: 特征值和特征向量: 特征值: 特征向量: 用来描述矩阵的信息 特征向量 和 特征值之间的关系 拳击:方向和力量 特征值和特征向量的物理意义: 表示相关的重要性 特征值和特征向量:进行提…

阳了在家没事干?教大家用python在家做一个万能看视频软件,绝对正经啦~

嗨害大家好鸭&#xff01;我是小熊猫~ 我前阵子不小心阳了&#xff0c;该说不说&#xff0c;真挺难受的 我在家真的就是纸巾热水不离手&#xff0c; 楼下水果店老板娘还说我年轻人身体怎么这么差… 哼我阳过之后我就锻炼去&#xff01;&#xff01;&#xff01; 效果展示 有…

如何删除掉设备和驱动器下百度网盘的图标

电脑安装百度网盘后&#xff0c;在设备和驱动器这里会有百度网盘的图标&#xff0c;如下图所示。 对有强迫症的人来说&#xff0c;这很难受&#xff0c;就一定要想办法删除掉该图标&#xff0c;那么具体怎么操作呢&#xff1f; 你如果在设备和驱动器下右击百度网盘&#xff0c…