Excel 如何使用python设置XLSX文件中单元格的数字格式
我想使用python脚本为XLSX文件中的列或单元格设置数字格式 转换脚本获取CSV文件并将其转换为XLSX。我故意将标题视为常规行,因为最终脚本在转换结束时会根据指定的命令行参数以各种方式进行转换 下面的示例仅显示我尝试将数值格式设置为列或单元格 我做错了什么 使用此代码,我成功地将对齐设置为右侧。但是任何设置数字格式的方法都失败了。XLSX文件仍然将绿色三角形保留在单元格的左上角,并拒绝将其视为数字单元格。 附加的屏幕截图显示“错误”结果 ----数据文件---- ----python脚本----Excel 如何使用python设置XLSX文件中单元格的数字格式,excel,python-3.x,pandas,format,xlsxwriter,Excel,Python 3.x,Pandas,Format,Xlsxwriter,我想使用python脚本为XLSX文件中的列或单元格设置数字格式 转换脚本获取CSV文件并将其转换为XLSX。我故意将标题视为常规行,因为最终脚本在转换结束时会根据指定的命令行参数以各种方式进行转换 下面的示例仅显示我尝试将数值格式设置为列或单元格 我做错了什么 使用此代码,我成功地将对齐设置为右侧。但是任何设置数字格式的方法都失败了。XLSX文件仍然将绿色三角形保留在单元格的左上角,并拒绝将其视为数字单元格。 附加的屏幕截图显示“错误”结果 ----数据文件---- ----python脚本
问题与xlsxwriter脚本无关,而是在于您在Pandas中导入csv的方式。您的csv文件有一个头,但您在pd.read\u csv()中指定没有头。因此,Pandas还将标题行解析为数据。因为标题是字符串,所以整个列将作为字符串导入(而不是整数或浮点) 只需删除pd.read_csv和df.to_excel()中的“header=None”,它就可以正常工作了 因此:
。。。
#将CSV文件读取到数据帧
df=pandas.read_csv(csv文件名,低内存=False,quotechar='”,encoding=“ISO-8859-1”)
#将DataFrame输出到Excel文件
df.to_excel(xls_文件名,索引=False,编码=“utf-8”)
...
a,b,c,d,e
q,1,123,0.4,1
w,2,897346,.786876,-1.1
e,3,9872346,7896876.098098,2.098
r,4,65,.3,1322
t,5,1,0.897897978,-786
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import os
import pandas
import xlsxwriter
def is_type( value ):
'''Function to identify true type of the value passed
Input parameters: value - some value which type need to be identified
Returned values: Type of the value
'''
try:
int(value)
return "int"
except:
try:
float(value)
return "float"
except:
return "str"
csv_file_name = "test37.csv"
xls_file_name = "test37.xlsx"
# Read CSV file to DataFrame
df = pandas.read_csv(csv_file_name, header=None, low_memory=False, quotechar='"', encoding="ISO-8859-1")
# Output DataFrame to Excel file
df.to_excel(xls_file_name, header=None, index=False, encoding="utf-8")
# Create writer object for output of XLSX file
writer = pandas.ExcelWriter(xls_file_name, engine="xlsxwriter")
# Write our Data Frame object to newly created file
xls_sheet_name = os.path.basename(xls_file_name).split(".")[0]
df.to_excel(writer, header=None, index=False, sheet_name=xls_sheet_name, float_format="%0.2f")
# get objects for workbook and worksheet
wb = writer.book
ws = writer.sheets[xls_sheet_name]
ws.set_zoom(120)
num_format1 = wb.add_format({
'align': 'right'
})
num_format2 = wb.add_format({
'align': 'right',
'num_format': '0.00'
})
num_format3 = wb.add_format()
num_format3.set_num_format('0.00')
ws.set_column('D:D', None, num_format1)
ws.set_column('D:D', None, num_format2)
for column in df.columns:
for row in range(1,len(df[column])):
if is_type(df[column][row]) == "int":
#print("int "+str(df.iloc[row][column]))
ws.write( row, column, df.iloc[row][column], num_format2 )
elif is_type(df[column][row]) == "float":
#print("float "+str(df.iloc[row][column]))
ws.write( row, column, df.iloc[row][column], num_format2 )
else:
pass
wb.close()
writer.save()
exit(0)
...<first part of your code>
# Read CSV file to DataFrame
df = pandas.read_csv(csv_file_name, low_memory=False, quotechar='"', encoding="ISO-8859-1")
# Output DataFrame to Excel file
df.to_excel(xls_file_name, index=False, encoding="utf-8")
<rest of your code>...