Greasy Fork is available in English.
导出国际化词条 Excel
当前为
// ==UserScript==
// @name 新方舟导出国际化词条 ikun专属
// @namespace http://your-namespace.com
// @version 1.0
// @author mlf
// @description 导出国际化词条 Excel
// @require https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.0/xlsx.full.min.js
// @require http://greasyfork.icu/scripts/430412-chinese-conversion-api/code/Chinese%20Conversion%20API.js?version=957744
// @grant none
// @include *
// @license MIT
// ==/UserScript==
;(function () {
function doExport() {
const { sc2tc } = window.ChineseConversionAPI
// 示例 JSON 数据
let vals = []
console.error('window.i18', window.i18)
if (window.i18) {
vals = window.i18
window.localStorage.setItem('i18Set', JSON.stringify(vals))
delete window.i18
} else {
let data = window.localStorage.getItem('i18Set')
if (!data) {
alert('还没有输入词条')
return
}
vals = JSON.parse(data)
}
if (!Array.isArray(vals)) {
alert('值接受数组')
return
}
console.warn('获得的词条', vals)
const [groupkey, obj] = vals
const jsonData = Object.entries(obj).map(([keys, val]) => {
return {
'*编码': groupkey + '_' + keys,
'*类型': 'front',
'*分组': groupkey,
'*内容(zh_CN)': val,
'*内容(hk_CN)': sc2tc(val), // 将内容(hk_CN)转为繁体中文
'*内容(en_US)': keys.replace(/_([a-z])/g, function (match, letter) {
return letter.toUpperCase()
}), // 使用 val 的值作为 *内容(en_US)
}
})
function exportToExcel(data, fileName) {
const mappedData = data.map((obj) => {
return {
'*编码': obj['*编码'],
'*类型': obj['*类型'],
'*分组': obj['*分组'],
'*内容(zh_CN)': obj['*内容(zh_CN)'],
'*内容(hk_CN)': obj['*内容(hk_CN)'],
'*内容(en_US)': obj['*内容(en_US)'],
}
})
const worksheet = XLSX.utils.json_to_sheet(mappedData)
const workbook = XLSX.utils.book_new()
XLSX.utils.book_append_sheet(workbook, worksheet, '多语言')
const excelBuffer = XLSX.write(workbook, { type: 'array' })
const blob = new Blob([excelBuffer], {
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
})
const link = document.createElement('a')
link.href = URL.createObjectURL(blob)
link.download = fileName
link.style.display = 'none'
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}
exportToExcel(jsonData, `${groupkey}.xlsx`)
}
function addButton() {
const button = document.createElement('button')
button.textContent = '导出词条'
button.style.position = 'fixed'
button.style.top = '5px'
button.style.right = '50%'
button.style.zIndex = '9999' // 设置按钮的层级,确保在最前面显示
button.style.appearance = 'none'
button.style.backgroundColor = '#007fff'
button.style.color = '#fff'
button.style.borderRadius = '2px'
button.style.border = 'none'
button.style.cursor = 'pointer'
button.style.transition = 'background-color .3s,color .3s'
button.style.padding = '0.5rem 1.3rem'
button.draggable = true
button.addEventListener('click', function () {
doExport()
})
document.body.appendChild(button)
const closeButton = document.createElement('button')
closeButton.textContent = 'X'
closeButton.style.position = 'fixed'
closeButton.style.top = '5px'
closeButton.style.right = '50%'
closeButton.style.zIndex = '9999'
closeButton.style.appearance = 'none'
closeButton.style.backgroundColor = 'transparent'
closeButton.style.color = '#001'
closeButton.style.border = 'none'
closeButton.style.borderRadius = '50%'
closeButton.style.cursor = 'pointer'
closeButton.style.padding = '0.5rem'
closeButton.style.marginLeft = '5px'
closeButton.addEventListener('click', function () {
document.body.removeChild(button)
document.body.removeChild(closeButton)
})
document.body.appendChild(closeButton)
}
function saveButtonPosition() {
const button = document.querySelector('button[data-export-to-excel]')
if (button) {
const { top, right } = button.getBoundingClientRect()
localStorage.setItem(
'exportButtonPosition',
JSON.stringify({ top, right })
)
}
}
function restoreButtonPosition() {
const savedPosition = localStorage.getItem('exportButtonPosition')
if (savedPosition) {
const { top, right } = JSON.parse(savedPosition)
const button = document.querySelector('button[data-export-to-excel]')
button.style.top = `${top}px`
button.style.right = `${right}px`
}
}
addButton()
restoreButtonPosition()
// 保存按钮位置到 localStorage
window.addEventListener('beforeunload', saveButtonPosition)
})()