Я хочу скопировать указанные c строки и столбцы с одного листа на другой методом "openpyxl". Но мой основной файл Excel - это файл .xlsb, а «openpyxl» не поддерживает файл .xlsb. Так что я строю этот сложный путь. (* Я не могу изменить .xlsb из Microsoft Excel в соответствии с правилами компании).
основной файл document.xlsb-> временный document.xlsx-> мой анализ document.xlsx
- Во-первых, я меняю формат данных .xlsb на .xlsx с помощью pandas.
-После этого из временного document.xlsx я беру определенные столбцы c и строки с методом openpyxl и вставьте в мой анализ document.xlsx
-Мой вопрос: я хочу изменить формат столбца D с "общего" на "короткую дату", и я новичок в Python. Не могли бы вы помочь мне с кодами? Кроме того, если я могу изменить ячейку формата в «.xlsb на .xlsx период преобразования», возможно, я смогу принять ввод от пользователя: «к какой дате вы хотите добавить« мой анализ документа.xlsx? »»
'основной документ.xlsx'
'временный документ.xlsx'
'my analysis document.xlsx'
import pandas as pd
import openpyxl
df = pd.read_excel("main document.xlsb",sheet_name="Data", engine="pyxlsb")
df.to_excel("temporary document.xlsx")
#! Python 3
# - Copy and Paste Ranges using OpenPyXl library
# Prepare the spreadsheets to copy from and paste too.
# File to be copied
wb = openpyxl.load_workbook("temporary document.xlsx") # Add file name
sheet = wb["Sheet1"] # Add Sheet name
# File to be pasted into
template = openpyxl.load_workbook("my analyse document.xlsx") # Add file name
temp_sheet = template["Sheet2"] # Add Sheet name
# Copy range of cells as a nested list
# Takes: start cell, end cell, and sheet you want to copy from.
def copyRange(startCol, startRow, endCol, endRow, sheet):
rangeSelected = []
# Loops through selected Rows
for i in range(startRow, endRow + 1, 1):
# Appends the row to a RowSelected list
rowSelected = []
for j in range(startCol, endCol + 1, 1):
rowSelected.append(sheet.cell(row=i, column=j).value)
# Adds the RowSelected List and nests inside the rangeSelected
rangeSelected.append(rowSelected)
return rangeSelected
# Paste range
# Paste data from copyRange into template sheet
def pasteRange(startCol, startRow, endCol, endRow, sheetReceiving, copiedData):
countRow = 0
for i in range(startRow, endRow + 1, 1):
countCol = 0
for j in range(startCol, endCol + 1, 1):
sheetReceiving.cell(row=i, column=j).value = copiedData[countRow][countCol]
countCol += 1
countRow += 1
def createData():
print("Processing...")
selectedRange = copyRange(2, 2011, 183, 2274, sheet) # Change the 4 number values (startCol, startRow, endCol, endRow, sheet)
pastingRange = pasteRange(2, 4573, 182, 4836, temp_sheet, selectedRange) # Change the 4 number values (startCol, startRow, endCol, endRow, sheet)
# You can save the template as another file to create a new file here too.s
template.save("my analyse document.xlsx")
print("Range copied and pasted!")
go= createData()