如何使用python更改excel中的列格式

如何使用python更改excel中的列格式,python,excel,pandas,openpyxl,xlsxwriter,Python,Excel,Pandas,Openpyxl,Xlsxwriter,我想用“openpyxl”方法将一个特定的行和列从一个工作表复制到另一个工作表。但我的主要excel文件是.xlsb文件,而“openpyxl”不支持.xlsb文件,所以我用这种复杂的方式构建。(*根据公司规则,我无法从Microsoft Excel更改.xlsb) main document.xlsb文件->临时文档.xlsx->我的分析文档.xlsx -首先,我正在使用pandas将数据格式.xlsb更改为.xlsx -之后,从temporary document.xlsx,我将使用open

我想用“openpyxl”方法将一个特定的行和列从一个工作表复制到另一个工作表。但我的主要excel文件是.xlsb文件,而“openpyxl”不支持.xlsb文件,所以我用这种复杂的方式构建。(*根据公司规则,我无法从Microsoft Excel更改.xlsb)

main document.xlsb文件->临时文档.xlsx->我的分析文档.xlsx

-首先,我正在使用pandas将数据格式.xlsb更改为.xlsx

-之后,从temporary document.xlsx,我将使用openpyxl方法获取特定的列和行,并粘贴到我的analysis document.xlsx

-我的问题是:我想把D列格式从“general”改为“short date”,我是Python的初学者。你能帮我查一下密码吗? 另外,如果我可以将“.xlsb”中的格式单元格更改为“.xlsx转换周期”,也许我可以从用户处获取输入:“您希望在哪个日期附加‘我的分析文档.xlsx’”

'main document.xlsx'

'temporary document.xlsx'

'my analysis document.xlsx'


是的,看看下面的:

因此,迭代列中的所有单元格(D8向下),并使用新格式将旧值写入单元格


是的,请看下面的:

因此,迭代列中的所有单元格(D8向下),并使用新格式将旧值写入单元格


您也可以在使用
pandas.DataFrame
读取数据后,在以下帮助下执行相同操作:


此外,您还可以根据需要更改日期格式。

您也可以在使用pandas.DataFrame读取数据后,在以下帮助下更改日期格式:


此外,您可以根据您的要求更改日期格式。

问题以非常简单的方式解决,当我解决它时,我感到震惊

1-打开“我的分析文档.xlsx”

2-选择整个“D”列

三次单击主页按钮

4格式单元格->短日期

即使我用python更新excel数据,列格式类型也没有改变

谢谢大家的支持


问题以非常简单的方式解决了,当我解决它时,我感到震惊

1-打开“我的分析文档.xlsx”

2-选择整个“D”列

三次单击主页按钮

4格式单元格->短日期

即使我用python更新excel数据,列格式类型也没有改变

谢谢大家的支持


到目前为止,您尝试了什么?我尝试了zypro和manojk的解决方案。我将具体编辑这个问题。到目前为止,你尝试了什么?我尝试了zypro和manojk的解决方案。我将具体编辑问题。谢谢,但出现了此错误;“KeyError:‘Date_Int’与您的解决方案更改此
df['Date']=df['TARIH']。应用(lambda x:xlrd.xldate.xldate_作为_datetime(x,0))
,因为
Date_Int
不是文件中的列名称。这是我在pandas中的示例数据文件“pandas_libs\index.pyx”的第111行中添加的一列。pandas中的第138行是“pandas_libs\index.pyx”。pandas中的第1619行是“pandas_libs\hashtable\hashtable\class\u helper.pxi”“pandas_libs\hashtable_class_helper.pxi”,第1627行,在pandas._libs.hashtable.PyObjectHashTable.get_item keyror:“TARİH”发生此错误。“TARİH”不是列名,可能与此有关。
导入pandas作为pd导入xlrd df=pd.read_excel(“read file.xlsb”,sheet_name=“Data”,engine=“pyxlsb”)df.to_excel(“第二个文件.xlsx”)df['Date']=df['TARİH'].apply(lambda x:xlrd.xldate.xldate_as_datetime(x,0))
我会这样做,因为在那之后我会使用“openpyxl”,而openpyxl不能使用.xlsb文件。我将从“第二个文件.xlsx”中获取特定的行和列“这是我的特定行、列复制方法:看起来您正试图读取excel文件,顶部有一些空白行,如图所示,请删除excel文件中1到6行,然后重新读取,确保第7行是数据框中的标题。然后运行代码
df['Date']=df['TARİH'](lambda x:xlrd.xldate.xldate_as_datetime(x,0))
谢谢,但出现了此错误;“KeyError:”Date_Int“与您的解决方案一起更改此
df['Date']=df['TARIH']。应用(lambda x:xlrd.xldate.xldate_as_datetime(x,0))
因为
Date\u Int
不是文件中的列名称。它是我在示例数据中添加的一列。文件“pandas\u libs\index.pyx”,第111行,在pandas中。_libs.index.IndexEngine.get_loc文件“pandas\u libs\index.pyx”,第138行,在pandas中。_libs.index.IndexEngine.get_loc文件“pandas\u libs\hashtable\class\u helper.pxi”,第1619行,在pandas中。_libs.hashtable.PyObjectHashTable.get_项文件“pandas_libs\hashtable_class_helper.pxi”,第1627行,在pandas中。_libs.hashtable.PyObjectHashTable.get_项键错误:“TARİH”发生此错误。“TARİH”不是列名,可能与此相关。
导入pandas为pd import xlrd df=pd.readİexcel(“read file.xlsb”,sheet_name=“Data”,engine=“pyxlsb”)df.to_excel(“第二个file.xlsx”)df['Date']=df['TARİH'].apply(lambda x:xlrd.xldate.xldate_as_datetime(x,0))
我正在这样做,因为在那之后我将使用“openpyxl”并且openpyxl不能使用.xlsb文件。我将从“第二个file.xl”中获取特定的行和列“这是我的特定行、列复制方法:看起来您正试图读取excel文件,顶部有一些空白行,如图所示,请删除excel文件中1到6行,然后重新读取,确保第7行是数据框中的标题。然后运行代码
df['Date']=df['TARİH'](lambda x:xlrd.xldate.xldate\u as_datetime(x,0))
感谢您的回复。我是python新手,根据这一点,我无法很好地应用代码。您提到的代码无效。出现此错误:“NameError:name”单元格
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()
import xlsxwriter

workbook = xlsxwriter.Workbook('your_file.xlsx')
worksheet = workbook.add_worksheet()

cell_format05 = workbook.add_format()
cell_format05.set_num_format('mm/dd/yy')
worksheet.write(5, 0, 36892.521, cell_format05)  # output -> 01/01/01

# untested code for you, get your cells into column_D8_downwards array
# this is rather a structural code, not functional!
row = 0
for cell in column_D8_downwards:
    worksheet.write(row, 'D8', cell, cell_format_05)
    row=+1

workbook.close()
import xlrd
import pandas as pd

df = pd.read_csv('Your_File.csv')
df = df[6:].reset_index()
df.columns = df.iloc[0]

df['Date'] = df['Date_Int'].apply(lambda x: xlrd.xldate.xldate_as_datetime(x, 0))

print(df)

   TARİH       Date
0     43891 2020-03-01
1     43892 2020-03-02
2     43893 2020-03-03
3     43894 2020-03-04
4     43895 2020-03-05