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.首先代码 ...
随机推荐
- 实现一个CRDT工具库——ORSet
ORSet 这段代码实现了OR-Set,是一种基于版本向量的CRDT,用于实现集合的合并.OR-Set由两个集合add和remove组成,add集合存储添加的元素,remove集合存储删除的元素.每个 ...
- Web前端开发必看的100道大厂面试题
1. 说说gulp和webpack的区别 开放式题目 Gulp强调的是前端开发的工作流程.我们可以通过配置一系列的task,定义task处理的事务(例如文件压缩合并.雪碧图.启动server.版本控制 ...
- 二进制安装Kubernetes(k8s) v1.26.0 IPv4/IPv6双栈
二进制安装Kubernetes(k8s) v1.26.0 IPv4/IPv6双栈 https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 ...
- 在Kubernetes部署GitLab
在Kubernetes部署GitLab 前置条件 已安装Helm工具已部署NFS自动创建PVC 使用HELM安装 [root@k8s-master01 ~]# helm repo add gitlab ...
- docker方式实现minio数据持久化离线安装
保存镜像 root@hello:~# docker pull minio/minio Using default tag: latest latest: Pulling from minio/mini ...
- window远程桌面
此文档概述如何开启win8.win8.1系统的远程桌面连接服务,可以让我们从一台电脑远程连接的其他电脑! 同时按"win键+R键",再打开的运行对话框中输入"contro ...
- [Linux]CentOS7:卸载、安装Java JDK
JDK(Java Development Kit)是Java语言的软件开发工具包,包括Java运行环境.Java开发工具.Java基础类库. JRE(Java Runtime Environment) ...
- [数据库]MySQL之SQL查询
一 关系表的介绍 * 课程表 * 学生表 * 选课表 二 SQL查询语句格式 /* SQL查询的一般格式 SELECT [ALL | DISTINCT] [* | coulmnNameA,coulmn ...
- tkinter的标签和按钮以及输入和文本
一.标签和文本 import tkinter as tk #1.定义tk的实例对象,也就是窗口对象 window = tk.TK() #2.设置窗口大小无法缩小和放大 window.resiable( ...
- 五月十四号java基础知识点
class Person{ private String name; private int age; public Person(String name,int age){ this.name = ...