一、科学计数法及修约:
此部分代码有误,更新可见:
源码内已经注释的很清楚了,
import math # log10及向上修约x1 = 1000x2 = 0.0793y1 = 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名读取整个sheetdf11 = df11.dropna(axis=1, how="all") # 按列删除空列,例如表格有11列其中5列没有值,则删除df11 = df11.fillna("")#替换nantt = 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 framefor 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.RIGHTdocument.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, Ptfrom docx.oxml.ns import qnfrom docx import Documentfrom docx.enum.text import WD_PARAGRAPH_ALIGNMENT#设置字符对齐docx
