Ruby中数字取整:基于Excel生成XML时需将数值四舍五入至整数
嘿,我来帮你搞定从Excel生成XML时的数值四舍五入问题!结合常见的开发场景,我给你整理了几个实用的解决方案,你可以对照自己的代码调整:
针对Excel转XML的数值四舍五入方案
1. Python读取Excel时直接处理(最常用场景)
如果你用openpyxl这类库处理Excel,直接用Python的内置函数就能轻松实现四舍五入到整数。这里给你一个完整的示例:
from openpyxl import load_workbook import xml.etree.ElementTree as ET # 加载Excel文件,data_only=True确保读取计算后的值而非公式 wb = load_workbook('你的Excel文件.xlsx', data_only=True) ws = wb.active # 初始化XML根节点 root = ET.Element("dataset") # 遍历Excel行(跳过表头行) for row in ws.iter_rows(min_row=2): # 假设数值在当前行的第2列,可根据实际调整列索引 raw_value = row[1].value # 处理空值或非数值情况,避免报错 if raw_value is None or not isinstance(raw_value, (int, float)): rounded_num = 0 else: # 默认四舍五入到整数,Python的round()是银行家舍入规则 rounded_num = round(raw_value) # 将处理后的数值添加到XML节点 entry = ET.SubElement(root, "entry") value_node = ET.SubElement(entry, "numeric_value") value_node.text = str(rounded_num) # 生成XML文件 tree = ET.ElementTree(root) tree.write('输出的XML文件.xml', encoding='utf-8', xml_declaration=True)
2. 严格四舍五入(替代银行家舍入)
如果你的业务要求必须是“四舍五入”(比如遇到5一律进1),而不是Python默认的银行家舍入(四舍六入五成双),可以自定义一个函数:
def strict_round(number): return int(number + 0.5) if number >= 0 else int(number - 0.5) # 使用时替换round()即可 rounded_num = strict_round(raw_value)
3. VBA处理Excel转XML的情况
要是你用VBA来做这个转换,用Round()函数就能实现:
Sub ExcelToXMLWithRound() Dim ws As Worksheet Dim xmlDoc As Object Dim rootNode As Object, entryNode As Object, valueNode As Object Dim lastRow As Long, i As Long Dim rawValue As Variant, roundedValue As Integer Set ws = ThisWorkbook.Sheets("Sheet1") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 创建XML文档 Set xmlDoc = CreateObject("MSXML2.DOMDocument") xmlDoc.encoding = "UTF-8" Set rootNode = xmlDoc.createElement("dataset") xmlDoc.appendChild rootNode ' 遍历行生成XML节点 For i = 2 To lastRow rawValue = ws.Cells(i, 2).Value ' 处理空值 If IsEmpty(rawValue) Or Not IsNumeric(rawValue) Then roundedValue = 0 Else roundedValue = Round(rawValue) End If Set entryNode = xmlDoc.createElement("entry") Set valueNode = xmlDoc.createElement("numeric_value") valueNode.Text = roundedValue entryNode.appendChild valueNode rootNode.appendChild entryNode Next i ' 保存XML文件 xmlDoc.Save "C:\输出路径\结果文件.xml" MsgBox "XML生成完成!" End Sub
要是你的代码有特定的结构或者用了其他工具,可以把代码片段贴出来,我再帮你针对性优化!
内容的提问来源于stack exchange,提问作者GLH
相关产品推荐
相关产品推荐

