更多更全绿色软件到阿猴软件站:www.ahou.net!

当前位置:首页 > 电脑软件 > 办公软件

LightBlack工具 Python版

LightBlack工具 Python版

标签: Excel工具
分享到:

分类:办公软件

大小:102.67 MB

时间:2021-09-02

授权:免费软件

语言:简体中文

平台:WinAll、Win10、Win7、WinXP

软件简介

  LightBlack工具是由以为论坛大佬制作的一个Excel工具箱软件,轻松实现Excel搜索查询,PDF转Word等功能,最大的特点就是软件是单文件程序,操作非常方便,内置的功能全部免费使用。特别适合经常需要进行PDF转换的用户使用。

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:BaiduNetdiskDownloadddpythonandpycharmQT5_newimagessix.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()+‘imagesBook.ico’))

  self.setWindowIcon(QIcon(‘D:BaiduNetdiskDownloadddpythonandpycharmQT5_newimagesfavicon.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同目录下查看!!!nn生成路径为:{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文件已成功转换图片文件,请前往桌面查看!!!nn生成路径为:{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_())

展开更多