首页 > 其他分享 >Android string.xml与Excel的互相转换

Android string.xml与Excel的互相转换

时间:2023-05-10 16:25:52浏览次数:35  
标签:xml parser string args Excel value file

Notice

使用以下脚本需要安装 openpyxllxml 两个库。

string.xml转成Excel文件

"""
将 Android string.xml 文件中的文本转换成 Excel 表格并保存到文件。
使用方法:python android_string_to_excel.py -f strings.xml [-o outfile_name]
-f: 要处理的 Android string.xml 文件路径.
-o: 输出文件路径,如果未指定,则默认为 'strings.xlsx'.
"""
 
import os
import argparse
 
import openpyxl
from lxml import etree
 
 
def printUsage():
    """print usage and exit"""
    usage = '''Usage:
        python android_string_to_excel.py -f strings.xml [-o outfile_name]
        '''
    print(usage)
    exit(-1)
 
 
parser = argparse.ArgumentParser(description='Convert Android string.xml to Excel')
parser.add_argument('-f', '--file',
                    type=str,
                    required=True,
                    help='Android string.xml file path')
parser.add_argument('-o', '--output',
                    type=str,
                    help='Output file name, default is "strings.xlsx"')
args = parser.parse_args()
 
xml_path = args.file
out_file = args.output or 'strings.xlsx'
 
if not os.path.isfile(xml_path):
    print(f'Error: {xml_path} is not a valid file!')
    printUsage()
 
try:
    tree = etree.parse(xml_path)
except etree.ParseError as e:
    print(f'Error: cannot parse XML at {xml_path}, {e}')
    exit(-1)
 
root = tree.getroot()
workbook = openpyxl.Workbook()
sheet = workbook.active
col_idx = 1
headers = ['key', 'value']
for col_idx, header in enumerate(headers, 1):
    sheet.cell(row=1, column=col_idx, value=header)
 
for row_idx, child in enumerate(root, 2):
    key = child.attrib['name']
    value = child.text.strip() if child.text else ''
    sheet.cell(row=row_idx, column=1, value=key)
    sheet.cell(row=row_idx, column=2, value=value)
 
workbook.save(out_file)
print(f'{xml_path} converted and saved to {out_file}.')

Excel生成string.xml文件

import argparse
import xml.etree.ElementTree as ET
from openpyxl import load_workbook

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--file', type=str, required=True,
                    help='Excel file path')
parser.add_argument('-s', '--sheet', type=str, default='Sheet1',
                    help='Sheet name in Excel file, default is "Sheet1"')
parser.add_argument('-k', '--key', type=int, default=1,
                    help='Index of key column in Excel file, default is 1')
parser.add_argument('-v', '--value', type=int, default=2,
                    help='Index of value column in Excel file, default is 2')
parser.add_argument('-o', '--output', type=str, default='strings.xml',
                    help='Output file name, default is "strings.xml"')
args = parser.parse_args()

def excel_to_xml(excel_file, sheet_name, key_index, value_index, output_file):
    workbook = load_workbook(filename=excel_file)
    worksheet = workbook[sheet_name]

    root = ET.Element("resources")
    for row in worksheet.values:
        key = str(row[key_index-1])
        value = str(row[value_index-1])
        item = ET.SubElement(root, "string", name=key)
        item.text = value

    tree = ET.ElementTree(root)
    tree.write(output_file, encoding='utf-8')

excel_to_xml(args.file, args.sheet, args.key, args.value, args.output)

标签:xml,parser,string,args,Excel,value,file
From: https://www.cnblogs.com/imorning/p/android_string_xml_excel.html

相关文章

  • springboot 项目中返回前端对象错误显示是string格式
    原因是返回json对象后面跟了一段,如下图这个错误藏的比较隐蔽,有个小的对象没有实现getter方法。在返回前端对象里,所有对象都得可以序列化和反序列化,对应的对象中所有属性是否都实现getter和setter等序列化。......
  • git push出现冲突,用git status命令查看提示both modified: .idea/workspace.xml 问题
    问题:在github上管理项目,多次提交以后提交提示workspace.xml出现conflicted原因:Android项目在根目录的.gitignore文件中没有添加.idea文件夹忽略。解决办法:1.在.gitignore中添加下面内容:.gitignore.idea/.gitignore介绍:在工程实现过程中,会生成一些中间文件,或者在项目中的部分文......
  • Excel 导出
    1.pom相关<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.1.0</version></dependency>......
  • ValueError: could not convert string to float: '\ufeff\n'
    python读取文件(下图为部分截图),行内容有交易金额,也有其它内容 过滤掉非交易金额行:ifnoti.startswith("2023")andi.strip()!="\n"andnoti.startswith("退"):对交易金额行进行强转float做统计但是有特殊字符行,所以报如下错: 解决方案:过滤前,去除字符即可,i.strip('\ufe......
  • blob转string,同步调用
    问题背景通过接口下载文件的时候,后端设置的responseHeadercontent-disposition:attachment;filename=文件名.xlsxcontent-type:application/vnd.ms-excel;charset=utf-8前端接口请求的时候,设置responseType:'blob',后端接口直接返回的是文件流。然后当下载文件异常的情况......
  • What does .NET's String.Normalize do?
    Whatdoes.NET'sString.Normalizedo?回答1OnedifferencebetweenformCandformDishowletterswithaccentsarerepresented:formCusesasingleletter-with-accentcodepoint,whileformDseparatesthatintoaletterandanaccent.Forinstance......
  • Method com/mysql/jdbc/JDBC4ResultSet.getObject(Ljava/lang/String;Ljava/lang/Clas
      mybatis-plus生成的日期类型默认是localdatetime,数据库是datetime,按道理转换应该可以,我又不想把实体类转换成date查看依赖<--locadate/locadatetime的时间依赖--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-ty......
  • Qt XML读写之 QXmlStreamReader、QXmlStreamWriter
    OverviewQtXML将不再接收额外的功能。对于迭代地读取或编写XML文档(SAX),Qt建议使用QtCore的QXmlStreamReader和QXmlStreamWriter类。这些类既易于使用,又更符合XML标准。但是遗憾的是如果想修改更新XML文档,这个模块没有提供解决方案,还只能使用QDomDocument。QXmlStreamReader类......
  • [NISACTF 2022]string
    查壳:64位:进IDA:进来就给flag:跟进:一堆东西,秉承着赶时间的优良作风,只看有用的输出:挺简单一个随机数问题,找种子就行:上脚本:intmain(){srand(10086);for(inti=1;i<=13;i++){intv4=rand();cout<<v4%8+1;}return0;......
  • 20230509001 - DataTable 导出成Excel
               DataTabledt_e=DataSet0.Tables[0];           SaveFileDialogsaveFileDialog=newSaveFileDialog();           saveFileDialog.Filter="Execlfiles(*.xls)|*.xls";           saveFileDialog.FilterIndex......