一、科学计数法及修约:
此部分代码有误,更新可见:
源码内已经注释的很清楚了,
import math # log10及向上修约
x1 = 1000
x2 = 0.0793
y1 = math.log10(x1 * x2) # log10对于小数等可以明确返回相关数字。
y01 = math.ceil(abs(math.log10(x1 * x2))) # math.ceil为向上取整得到小数位数。
if y1 > 0:
# 对于log10正数的情况↓将数字转化为科学计数法,并且执行向上修约
z1 = x1 * x2 / pow(10, y01-1)#转化为整数位只有1位的数字
print(z1)
z2 = "{:.1f}".format(z1) # 格式化,{:1f},为格式化为小数,保留1位
print(z2)
if float(z1) > float(z2):
#对于修约后进位的情况↓
if len(str(int(z1 + 0.1))) == 2:
z01 = "{:.1f}".format((z1 + 0.1) / 10) + "E+" + str(y01)
else:
z1 = "{:.1f}".format((float(z2) + 0.1))
z01 = z1 + 'E+' + str(y01-1)
#对于进位情况处理结束↑
else:
z01 = z2 + 'E+' + str(y01)
else:
# 对于log10负数的情况↓
z1 = x1 * x2 * pow(10, y01)
print(z1)
z2 = "{:.1f}".format(z1)
print(z2)
if float(z1) > float(z2):
if len(str(int(z1+0.1))) == 2 :
z01 = "{:.1f}".format((z1 + 0.1)/10) + "E-" + str(y01-1)
else:
z1 = "{:.1f}".format((float(z2) + 0.1))
z01 = z1 + 'E-' + str(y01)
else:
z01 = z2 + 'E-' + str(y01)
print(z01,float(z01))
其中,x1和x2为输入的数字,y1中有x1和x2相乘的计算,这段完全可以改为读取数据计算的形式。
实现的功能是,将计算后的数字修约为只保留一位小数的科学计数法,对于修约后进位做了二次修约,修约采取向上修约,即修约末位后面位数只要存在数字,即+1,放到实例中,即为+0.1。
采取log10的计算判断小数点后0的个数。
代码未涉及负数的情况,需要的时候只需要在z01合成数字时增加“-”即可。
二、对word的操作:
1)写入有内容的表格或者空表格。
for lol in df:
df11 = pd.read_excel(listA[i], sheet_name=lol) # 按照sheet名读取整个sheet
df11 = df11.dropna(axis=1, how="all") # 按列删除空列,例如表格有11列其中5列没有值,则删除
df11 = df11.fillna("")#替换nan
tt = document.add_table(df11.shape[0] + 1, df11.shape[1], style="Table Grid")#切片第1行第1列
document.add_paragraph(lol + "\n")
for j in range(df11.shape[-1]):
tt.cell(0, j).text = df11.columns[j]
# add the rest of the data frame
for iq in range(df11.shape[0]):
for j in range(df11.shape[-1]):
tt.cell(iq + 1, j).text = str(df11.values[iq, j])
#导出附页2结束↑
field_list = ['s1', 's2', 's3', 's4', 's5', 's6', 's7', 's8', 's9', 's10', 's11']
table = document.add_table(rows=len(U2) + 1, cols=12, style="Table Grid")
table.cell(0, 0).text = '项目'
for iz in range(1, len(field_list) + 1):
table.cell(0, iz).text = field_list[iz - 1]
for jz in range(1, len(U2) + 1):
table.cell(jz, 0).text = '参数' + str(jz)
document.add_paragraph('xxxxx)')
2)设置字体及合并单元格
font_1 = document.styles['Normal'] # 样式
font_1.font.name = '思源宋体 CN' # 字体
font_1.font.size = Pt(8) # 字号
fk = document.add_table(df2.shape[0] + 1, df2.shape[1],style="Table Grid") # 设置表格并设置框线
fk.cell(0, 0).merge(fk.cell(0, 4)) # 合并单元格
run = fk.cell(0, 0).paragraphs[0].add_run('xxxx') # 写入内容
run.font.name = '思源宋体 CN' # 指定单元格设定字体
run.font.size = Pt(20) # 指定单元格设定字号
fk.cell(0, 0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 居中
3)页眉页脚及分隔符
document.sections[0].header.paragraphs[0].text = 'xxxx'
document.sections[1].header.paragraphs[0].text = 'xxxx'
#add_page_number(document.sections[0].footer.paragraphs[0])
#document.sections[0].footer.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT
document.sections[0].footer.paragraphs[0].text = 'xxxx'
document.sections[1].footer.paragraphs[0].text = 'xxxx'
document.add_section() # 插入分节符,可当分页符用
document.add_paragraph("附页2:xxxx\n")
4)import:
from docx.shared import Inches, Pt
from docx.oxml.ns import qn
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT#设置字符对齐docx