6z6z软件下载中心,为您提供安全的软件下载!

首页 软件下载 端游下载 安卓专区 苹果专区 新闻资讯 游戏攻略 软件教程 小程序 专题库

当前位置:首页 > 软件下载 > 应用软件 > 文档管理 > LightBlack工具 Python版

LightBlack工具 Python版

  LightBlack工具是由以为论坛大佬制作的一个Excel工具箱软件,轻松实现Excel搜索查询,PDF转Word等功能,软件是单文件程序,操作方便,内置功能免费。

LightBlack工具

  软件操作简单,先导入文件然后单击按钮就可以了(其实刚设定的时候连按钮都没,直接导入就自动转换了,后面想想,可能有些人不喜欢这种模式,所以改回了传统鼠标单击按钮),现在是可拖放也可导入,随便了,其他我做了限制,不是规定文件不能转换,比如Word转PDF,你导入PDF然后点击Word转PDF就不行,没办法不设置,到时候又软件有bug,转换完,会在左下角提示转换成功和文件路径的。

源码一览

  from win32com.client import constants, gencache

  from PyQt5.QtGui import *

  from PyQt5.QtWidgets import *

  from PyQt5.QtCore import Qt

  from xlrd import *

  import pandas

  import fitz

  import os

  import pandas as pd

  import sys

  class Main_Win(QWidget):

  def __init__(self):

  self.i = 0

  self.filename = “”

  super(Main_Win,self).__init__()

  self.setAcceptDrops(True)

  self.Main_WinUI()

  def Main_WinUI(self):

  self.setWindowTitle(‘Excel查询系统’)

  self.resize(1700,880)

  screen = QDesktopWidget().screenGeometry()

  size = self.geometry()

  newLeft = (screen.width() - size.width()) // 2

  newTop = (screen.height() - size.height()) // 2

  self.move(newLeft, newTop)

  self.setFixedSize(1700,880)

  palette = QPalette()

  pix = QPixmap(“D:\\BaiduNetdiskDownload\\d\\d\\pythonandpycharm\\QT5_new\\images\\six.png”)

  pix = pix.scaled(1300, 880)

  palette.setBrush(QPalette.Background, QBrush(pix))

  self.setPalette(palette)

  self.setToolTip(‘温馨提示:如果不会使用请先阅读使用方法!’)

  QToolTip.setFont(QFont(‘Times’,10,QFont.Black))

  #self.setWindowOpacity(0.8)

  #self.setAttribute(Qt.WA_TranslucentBackground)

  self.setWindowIcon(QIcon(os.getcwd()+‘\\images\\Book.ico’))

  self.setWindowIcon(QIcon(‘D:\\BaiduNetdiskDownload\\d\\d\\pythonandpycharm\\QT5_new\\images\\favicon.ico’))

  self.Main_WinLayout()

  self.show()

  def Main_WinLayout(self):

  self.group = QGroupBox(self)

  self.group.setTitle(‘参数设置区’)

  self.group.setGeometry(10,10,400,300)

  self.layout = QGridLayout()

  self.label_one = QLabel(‘《font color=#9370DB》请输入要搜索的关键词:《\\font》’)

  self.layout.addWidget(self.label_one,0,0)

  self.edit_one = QLineEdit()

  self.edit_one.setAlignment(Qt.AlignCenter)

  self.edit_one.setPlaceholderText(‘这里输入要搜索的关键词’)

  self.layout.addWidget(self.edit_one,0,1)

  self.button_one = QPushButton(‘开始搜索’)

  self.layout.addWidget(self.button_one,1,0)

  self.button_one.clicked.connect(self.dialoginfo)

  self.button_two = QPushButton(‘导入文件’)

  self.layout.addWidget(self.button_two, 1, 1)

  self.button_two.clicked.connect(self.groove_five)

  self.button_four = QPushButton(‘PDF转图片’)

  self.layout.addWidget(self.button_four, 2, 0)

  self.button_four.clicked.connect(self.Start_PDF_Image)

  self.button_five = QPushButton(‘Word转PDF’)

  self.layout.addWidget(self.button_five, 2, 1)

  self.button_five.clicked.connect(self.Start_Word_PDF)

  # ---------------------------------------------------------------

  self.group_two = QGroupBox(self)

  self.group_two.setTitle(‘输出日志’)

  self.group_two.setGeometry(10, 320, 400, 550)

  self.textedit_one = QTextEdit()

  self.textedit_one.setHtml(‘《font color=red》温馨提示!《\\font》’)##00FA9A

  self.textedit_one.setFont(QFont(“Times”,11))

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(“\n目前软件只支持Excel,Word,PDF文件\n”)

  self.layout_two = QGridLayout()

  self.textedit_one.setReadOnly(True)

  self.layout_two.addWidget(self.textedit_one)

  self.group_two.setLayout(self.layout_two)

  self.group_three = QGroupBox(self)

  self.layout_two = QHBoxLayout()

  self.group_three.setTitle(‘订单数据’)

  self.group_three.setGeometry(420, 10, 1265, 860)

  self.table_one = QTableWidget()

  # self.table_one.setColumnWidth(0, 200)#设置单元格的宽度

  # self.table_one.setColumnWidth(1, 200)

  # self.table_one.setColumnWidth(2, 200)

  # self.table_one.setColumnWidth(3, 200)

  # self.table_one.setColumnWidth(4, 200)

  self.setContextMenuPolicy(Qt.CustomContextMenu)

  self.customContextMenuRequested.connect(self.showMenu)

  self.contextMenu = QMenu(self)

  self.CP = self.contextMenu.addAction(‘复制’)

  self.CP.triggered.connect(lambda:self.selected_tb_text(self.table_one))

  self.CP = self.contextMenu.addAction(‘打开表格可编辑’)

  self.CP.triggered.connect(lambda: self.compile_True(self.table_one))

  self.CP = self.contextMenu.addAction(‘关闭表格可编辑’)

  self.CP.triggered.connect(lambda: self.compile_False(self.table_one))

  self.CP = self.contextMenu.addAction(‘添加数据’)

  self.CP.triggered.connect(lambda: self.appendinfo(self.table_one))

  self.layout_two.addWidget(self.table_one)

  self.group_three.setLayout(self.layout_two)

  QApplication.processEvents()

  self.group.setLayout(self.layout)

  def dialoginfo(self):

  find_str = []

  if self.filename:

  if self.edit_one.text() == “”:

  reply=QMessageBox.question(win, ‘温馨提示!’, ‘大哥,你关键字,怎么也输点吧!’, QMessageBox.Yes | QMessageBox.No, (QMessageBox.Yes))

  if reply == QMessageBox.Yes:

  pass

  else:

  self.dialoginfo()

  else:

  for i in self.data.to_dict(‘records’):

  for value in i.values():

  if str(value) == str(self.edit_one.text()):

  find_str.append(i)

  print(find_str)

  if len(find_str):

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(f“\n查询成功!!一共{len(find_str)}条数据!!\n”)

  self.table_one.setRowCount(len(find_str))

  self.table_one.clearContents()

  for s in range(len(find_str)):

  for key,value in find_str[s].items():

  item = QTableWidgetItem(str(value))

  item.setTextAlignment(Qt.AlignCenter)

  self.table_one.setItem(s, self.head_list.index(key), item)

  else:

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(f“\n查询失败,找不到该条信息!!!\n”)

  else:

  reply = QMessageBox.question(win, ‘温馨提示!’, ‘请先导入文件在查询!!’, QMessageBox.Yes | QMessageBox.No , (QMessageBox.Yes))

  if reply == QMessageBox.Yes:

  pass

  else:

  self.dialoginfo()

  def selected_tb_text(self,table_view):

  try:

  indexes = table_view.selectedIndexes() # 获取表格对象中被选中的数据索引列表

  indexes_dict = {}

  for index in indexes: # 遍历每个单元格

  row, column = index.row(), index.column() # 获取单元格的行号,列号

  if row in indexes_dict.keys():

  indexes_dict[row].append(column)

  else:

  indexes_dict[row] = [column]

  print(indexes_dict)

  print(row,column)

  text = []

  for row, columns in indexes_dict.items():

  row_data = []

  for column in columns:

  try:

  data = table_view.item(row, column).text()

  except BaseException as e:

  data = ‘ ’

  finally:

  if row_data:

  row_data = ‘ ’ + data

  else:

  row_data = data

  if text:

  if len(text) % 4 == 0:

  text.append(‘\n’)

  text.append(row_data)

  else:

  text.append(row_data)

  print(text)

  text_two = ‘’

  for item in text:

  text_two += item

  try:

  clipboard = QApplication.clipboard()

  clipboard.setText(text_two) # 复制到粘贴板

  except BaseException as e:

  print(e)

  except BaseException as e:

  print(e)

  clipboard = QApplication.clipboard()

  clipboard.setText(text_two)

  return ‘’

  def keyPressEvent(self, event): # 重写键盘监听事件

  # 监听 CTRL+C 组合键,实现复制数据到粘贴板

  if (event.key() == Qt.Key_C) and QApplication.keyboardModifiers() == Qt.ControlModifier:

  text = self.selected_tb_text(self.table_one) # 获取当前表格选中的数据

  def showMenu(self, pos):

  print(pos)

  self.contextMenu.exec_(QCursor.pos()) # 在鼠标位置显示

  def groove_five(self):

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(“\n正在导入Excel文件。..。..。..。..。.\n”)

  self.filename,ok = QFileDialog.getOpenFileName(self,‘请选择EXCAL文件!!!!’,‘C:\\’,‘文件类型默认所有,这个你不用担心:(*.*)’)

  self.excal()

  def excal(self):

  print(self.filename)

  self.head_list = []

  self.sum_list = []

  if self.filename[-4:] == “xlsx” or self.filename[-3:] == “xls”:

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(“\n导入成功!\n”)

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(f‘\n成功导入Excel文件!,路径为:{self.filename}\n’)

  self.data = pd.read_excel(self.filename)

  for i in self.data:

  self.head_list.append(i)

  self.table_one.setRowCount(len(self.data[i].values))

  self.table_one.setColumnCount(len(self.head_list))

  self.table_one.setHorizontalHeaderLabels(self.head_list)

  for j in self.head_list:

  for k in self.data[j].values:

  s = QTableWidgetItem(str(k))

  s.setTextAlignment(Qt.AlignCenter)

  self.sum_list.append(k)

  self.table_one.setItem(len(self.sum_list) - 1,int(self.head_list.index(j)), s)

  self.sum_list.clear()

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(f‘目前有{len(self.data[j].values)}条数据!\n’)

  self.table_one.setEditTriggers(QAbstractItemView.NoEditTriggers) # 设置单元格不可编辑

  elif self.filename[-4:] == “docx”:

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(“\n导入成功!\n”)

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(f‘\n成功导入Word文件!,路径为:{self.filename}\n’)

  elif self.filename[-3:] == “pdf”:

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(“\n导入成功!\n”)

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(f‘\n成功导入PDF文件!,路径为:{self.filename}\n’)

  else:

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(“\n导入失败,请检查是否导入的是后缀为:xlsx,docx,pdf的文件!\n”)

  def Queryinfomation(self):

  for i in range(self.shape[0]):

  for i2 in range(self.shape[1]):

  Query = self.table_one.item(i,i2).text()

  print(Query)

  def compile_True(self,table_view):

  self.table_one.setEditTriggers(QAbstractItemView.DoubleClicked)

  def compile_False(self,table_view):

  self.table_one.setEditTriggers(QAbstractItemView.NoEditTriggers)

  def appendinfo(self,table_view):

  self.i +=1

  self.table_one.setRowCount(self.i)

  def dragEnterEvent(self, QDragEnterEvent):

  if QDragEnterEvent.mimeData().hasText():

  QDragEnterEvent.acceptProposedAction()

  def dropEvent(self, QDropEvent):

  self.filename = QDropEvent.mimeData().text().replace(‘file:///’, ‘’)

  print(self.filename)

  self.excal()

  def closeEvent(self, event):

  reply=QMessageBox.question(self,‘Message’,‘确定要退出吗?’,QMessageBox.Yes,QMessageBox.No)

  if reply == QMessageBox.Yes:

  sys.exit()

  else:

  event.ignore()

  def pyMuPDF_fitz(self,pdfPath, imagePath):

  pdfDoc = fitz.open(pdfPath)

  for pg in range(pdfDoc.pageCount):

  page = pdfDoc[pg]

  rotate = int(0)

  zoom_x = 1.33333333

  zoom_y = 1.33333333

  mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)

  pix = page.getPixmap(matrix=mat, alpha=False)

  if not os.path.exists(imagePath):

  os.makedirs(imagePath)

  pix.writePNG(imagePath + ‘/’ + ‘images_%s.png’ % pg)

  def Start_Word_PDF(self):

  if self.filename[-4:] == “docx” or self.filename[-3:] == “dox”:

  reply = QMessageBox.question(win, ‘温馨提示!’, ‘程序开始执行时,因为计算量大可能会导致卡顿,这是正常现象,请不要乱点,请耐心稍等一会儿!!!’, QMessageBox.Yes | QMessageBox.No,(QMessageBox.Yes))

  if reply == QMessageBox.Yes:

  pass

  else:

  self.Start_Word_PDF()

  Word_pdf_path = self.filename.replace(self.filename[-4:],“pdf”)

  word = gencache.EnsureDispatch(‘Word.Application’)

  doc = word.Documents.Open(self.filename, ReadOnly=1)

  doc.ExportAsFixedFormat(Word_pdf_path,constants.wdExportFormatPDF,Item=constants.wdExportDocumentWithMarkup,CreateBookmarks=constants.wdExportCreateHeadingBookmarks)

  word.Quit(constants.wdDoNotSaveChanges)

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(f“\nWord文件已成功转换PDF文件,请前往Word同目录下查看!!!\n\n生成路径为:{Word_pdf_path}\n”)

  else:

  QMessageBox.question(win, ‘温馨提示!’, ‘请检查是否为Word文件!!’,

  QMessageBox.Yes | QMessageBox.No, (QMessageBox.Yes))

  def Start_PDF_Image(self):

  if self.filename[-4:] == “pdf”:

  reply = QMessageBox.question(win, ‘温馨提示!’, ‘程序开始执行时,因为计算量大可能会导致卡顿,这是正常现象,请不要乱点,耐心稍等一会儿!!!’,QMessageBox.Yes | QMessageBox.No, (QMessageBox.Yes))

  if reply == QMessageBox.Yes:

  pass

  else:

  self.Start_PDF_Image()

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(f‘\n正在转换PDF图片,\n’)

  PDF_images_path = os.path.join(os.path.expanduser(“~”), ‘Desktop//PDF_images’)

  self.pyMuPDF_fitz(self.filename, PDF_images_path)

  self.textedit_one.moveCursor(QTextCursor.End)

  self.textedit_one.insertPlainText(f‘\nPDF文件已成功转换图片文件,请前往桌面查看!!!\n\n生成路径为:{PDF_images_path}\n’)

  else:

  QMessageBox.question(win, ‘温馨提示!’, ‘请检查是否为PDF文件!!’,

  QMessageBox.Yes | QMessageBox.No, (QMessageBox.Yes))

  if __name__ == ‘__main__’:

  app = QApplication(sys.argv)

  win = Main_Win()

  sys.exit(app.exec_())

下载地址

最新软件推荐

立即下载

相关版本推荐

相关文章

  • 元气骑士前传boss专属武器获得途径有哪些 boss专属武器获取技巧
    元气骑士前传boss专属武器获得途径有哪些 boss专属武器获取技巧

    元气骑士前传boss专属武器获得途径有哪些?此款游戏中的武器获取方法有许多种,但是玩家们对于boss专属武器的获取方法并不是全面了解的,共有刷图、商店购买、开宝箱获取这三种途径,以下是小编为大家带来的具体的图文攻略,让你快速了解到并获得。...

  • 元气骑士前传精英地图金币怎么刷 元气骑士前传精英地图刷金币小技巧
    元气骑士前传精英地图金币怎么刷 元气骑士前传精英地图刷金币小技巧

    元气骑士前传精英地图上的金币怎么刷?在不考虑装备偏好的情况下,精英每小时金币产出为将近一百万,刷金币所花的时间有限,这就要求玩家们控制好时间,对于品质好的金币建议在价值方面优先捡取,以下是小编为带带来的刷金币小技巧。...

  • 逆水寒手游禁阁柳星闻玩法是什么 禁阁柳星闻玩法攻略大全
    逆水寒手游禁阁柳星闻玩法是什么 禁阁柳星闻玩法攻略大全

    逆水寒手游禁阁柳星闻玩法是什么?这是游戏新增的一种新玩法,但是有很多的玩家不是太清楚,起舞弄影、星逐月影、剑气挥舞、星落寰宇都是里边一些具体的玩法介绍,还有各种应对方式,下边是禁阁柳星闻玩法攻略大全,感兴趣的一起来看看吧。...

  • 逆水寒手游禁阁黑白双意怎么打 禁阁黑白双意打法攻略
    逆水寒手游禁阁黑白双意怎么打 禁阁黑白双意打法攻略

    逆水寒手游禁阁黑白双意怎么打?玩家若想要打败这个boss是需要费一番功夫的,难度比较高,很多玩家都不清楚该如何通关,以下就是小编整理的禁阁黑白双意打法攻略,帮助小伙伴更快速的了解这个boss,并将其击败顺利过关。...

  • 绝地求生荣都烟花燃放位置在哪 荣都烟花位置图文攻略
    绝地求生荣都烟花燃放位置在哪 荣都烟花位置图文攻略

    绝地求生荣都烟花燃放位置在哪?很多玩家都想点燃烟花看看它绽放的美,但是却不知道具体的存放位置,玩家只需按照文中的地图寻找到烟花的固定刷新地点到达以后便可见到烟花,以下是小编整理的荣都烟花位置图文攻略。...

  • 回门游戏第四章怎么完成 回门第四章通关流程解析
    回门游戏第四章怎么完成 回门第四章通关流程解析

    回门游戏第四章怎么完成?这一章的难度升级了,有许多的玩家到这一章总是找不到有用的线索,玩家需要到祠堂寻,并潜入地府找乔融并对话,最后让他回到宅子观看剧情即可通关,以下小编整理的第四章通关流程解析。...

  • 回门游戏攻略第三章怎么过 第三章剧情线索图文攻略
    回门游戏攻略第三章怎么过 第三章剧情线索图文攻略

    回门游戏攻略第三章怎么过?此章剧情相对比较复杂一些,首先玩家开局进入找到大姐并和她对话,根据指引步骤进行故事的推进,最后进入剧情观看完剧情后即可通关,以下是小编整理的第三章剧情线索图文攻略,有需要的玩家可以看看。...

  • 云顶之弈唱跳双C阵容如何搭配 s10唱跳双C上分阵容搭配方法
    云顶之弈唱跳双C阵容如何搭配 s10唱跳双C上分阵容搭配方法

    云顶之弈唱跳双C阵容如何搭配?此阵容是专为高费卡为主C搭配的,采用4裁决3五杀3KDA阵容是比较容易上分的,前期尽量用强势棋子与羁绊打工,接下来是小编为大家只整理的s10唱跳双C上分阵容搭配方法,感兴趣的可以看看。...

  • 星球重启复仇流浪者武器图纸怎么获得 流浪者武器图纸图文攻略
    星球重启复仇流浪者武器图纸怎么获得 流浪者武器图纸图文攻略

    星球重启复仇流浪者武器图纸怎么获得,玩家只要完成支线任务手作马丁枪即可获得图纸,首先是要找到剧情任务,完成一系列操作回到世界轶事中领取图纸奖励,下边是小编为大家准备的流浪者武器图纸图文攻略,一起来看看吧。...