Android string.xml与Excel的互相转换
Notice
使用以下脚本需要安装 openpyxl
和 lxml
两个库。
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)
Android string.xml与Excel的互相转换的更多相关文章
- Android string.xml error: Apostrophe not preceded by \
Android string.xml error: Apostrophe not preceded by \ 遇到了这个错误,编译无法通过 error: Apostrophe not preceded ...
- 【Android】android string.xml前后加空格的技巧
android string.xml 文字中间加入空格 <string name="password">密 码</string>   ...
- android string.xml %问题
反复检查后发现是string.xml中的 % 导致编译失败, 这是由于新的SDK采用了新版本的aapt(Android项目编译器),这个版本的aapt编译起来会比老版本更加的严格,然后在Android ...
- android string.xml里的空格字符
在string.xml定义字符串的时候常常要用到空格, 直接用键盘敲的话不知道是几个空格,常常看错了,导致误删. 假设用 来替代空格的话,就好非常多. 另外使用%1$s,%1$d能够在一个字符串里定义 ...
- Android string.xml 添加特殊字符
解决项目中在string.xml 中显示特殊符号的问题,如@号冒号等.只能考虑使用ASCII码进行显示: @号 @ :号 : 空格 以下为常见的ASCII十进制交换编码: --> <- ...
- Android string.xml 显示特殊符号
项目中要在string.xml 中显示特殊符号,如@号冒号等,直接写肯定不行啦..只能考虑使用ASCII码进行显示: 省略号 …@号 @:号 :空格 以下为常见的ASCII十进制交换编码: --& ...
- android string.xml前后加空格的技巧
方法1: <string name="password">密 码</string>  这个就代表着空格. 方法2:用\u0020代表空 ...
- Android String.xml中的符号总结
<b></b>加粗字体 <i></i> 斜体字体 <u></u> 给字体加下划线 \n 换行 \u0020表示空格 \u2026 ...
- android textview改变部分文字的颜色和string.xml中文字的替换(转)
转 :http://blog.csdn.net/ljz2009y/article/details/23878669 一:TextView组件改变部分文字的颜色: TextView textView ...
- Android Studio 轻松整理字符串到string.xml中
昨天了解了Alt+Enter快捷键的大用处,今天又发现了一个快捷的方法,必须记下来.转载请注明出处http://www.cnblogs.com/LT5505/p/5466630.html 1.首先代码 ...
随机推荐
- 爬取JSON文件并且存储
思路 1 先调用模块 2 定义一个函数 2.1 获取网址(点击评论 找到JSON的文件(分析评论preview)获取Request URL后面的地址) 2.2 添加用户的请求头 2.3 使用get方法 ...
- DOM选择器之元素其他节点选择器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- put、delete、post、get四种传参方式
PUT: this.$http.put('url', { modifyTime:this.sizeForm.modifyTime, mqttRes:this.sizeForm.mqttRes, udp ...
- NEFU高级程序设计-期末复习习题组
1. 用链表实现单词序列倒序输出 题目 用链表实现单词序列倒序输出.与以往不同,请考虑采用一种完全的动态分配方式! 为降低难度,"仁慈"的我已经给出了输出和释放的代码,你只要写出创 ...
- Cesium案例(六) Time Dynamic Wheels
Cesium.Ion.defaultAccessToken = "token"; const viewer = new Cesium.Viewer( ...
- [Excel/Word]常用函数与技巧
1 Excel case1 同时多列筛选 同时筛选多列: 选中首行(属性行)>筛选>(筛选目标的N列) case2 IF/OR/AND/COUNTIF语句 =IF(condition,co ...
- Redis(六)集群
Redis集群 1.1 存在的问题 容量不够Redis如何扩容 并发写操作,Redis如何分摊 当主机或者从机宕机,薪火相传.反客为主等主从模式都会导致ip发生变化,应用程序中的配置需要对应修改主机地 ...
- SpringBoot 集成 Quartz + MySQL
Quartz 简单使用 Java SpringBoot 中,动态执行 bean 对象中的方法 源代码地址 => https://gitee.com/VipSoft/VipBoot/tree/de ...
- 快速上手Linux核心命令(一):核心命令简介
前言 众所周知,Linux在服务器中占用不可替代的位置.大多数互联网公司,服务器都是采用的Linux操作系统.而Linux是一个主要通过命令行来进行管理的操作系统.只有熟练掌握Linux核心命令,在使 ...
- 3385. 【NOIP2013模拟】黑魔法师之门
3385. [NOIP2013模拟]黑魔法师之门 题目大意: 做法: 代码: 题目大意: 给你一个无向无权图,每次询问加入一条边问你图中每个点的度数大于零且都是偶数的子图的个数对1000000009取 ...