Add Wish Tally excel import

This commit is contained in:
Marvin Lehmann 2021-10-29 16:42:24 +02:00 committed by Made Baruna
parent 4160c13e20
commit 2efa7f4f02
No known key found for this signature in database
GPG key ID: 5AA5DA16AA5DCEAD
2 changed files with 91 additions and 6 deletions

View file

@ -263,6 +263,7 @@
"default": "Paimon.moe Export", "default": "Paimon.moe Export",
"takagg": "TakaGG Gacha Export", "takagg": "TakaGG Gacha Export",
"genshinwishes": "GenshinWishes Export", "genshinwishes": "GenshinWishes Export",
"wishtally": "WishTally",
"notice": [ "notice": [
"This feature still in BETA please backup first by going to Setting then Export to Excel!", "This feature still in BETA please backup first by going to Setting then Export to Excel!",
"Wish with the same timestamp and reward name will NOT be touched (so existing wish will not be rewritten)", "Wish with the same timestamp and reward name will NOT be touched (so existing wish will not be rewritten)",
@ -272,7 +273,8 @@
"selectFile": { "selectFile": {
"default": "Drag & drop Paimon.moe excel file here, or click here to select", "default": "Drag & drop Paimon.moe excel file here, or click here to select",
"takagg": "Drag & drop TakaGG gacha export excel file here, or click here to select", "takagg": "Drag & drop TakaGG gacha export excel file here, or click here to select",
"genshinwishes": "Drag & drop GenshinWishes csv file here, or click here to select" "genshinwishes": "Drag & drop GenshinWishes csv file here, or click here to select",
"wishtally": "Drag & drop Wish Tally excel file here, or click here to select"
}, },
"processing": "Processing...", "processing": "Processing...",
"addedOn": "Inserted on the:", "addedOn": "Inserted on the:",

View file

@ -428,6 +428,84 @@
loading = false; loading = false;
} }
async function readWishTallyExcel(workbook) {
const bannerCategories = {
'character-event': 'Character Event Wish History',
'weapon-event': 'Weapon Event Wish History',
standard: 'Permanent Wish History',
beginners: 'Novice Wish History',
};
const weapons = Object.values(weaponList);
const chars = Object.values(characters);
for (const [id, category] of Object.entries(bannerCategories)) {
const sheet = workbook.getWorksheet(category);
const wishes = [];
sheet.eachRow((row, index) => {
if (index === 1) return;
const type = row.getCell(4).text.toLowerCase();
let time = row.getCell(5);
const fullName = row.getCell(6).text;
if (time.type === ValueType.Date) {
time = dayjs.utc(time.value).format('YYYY-MM-DD HH:mm:ss');
} else {
time = time.text;
}
let name = '';
if (type === 'weapon') {
const weapon = weapons.find((e) => e.name === fullName);
if (weapon === undefined) {
pushToast($t('wish.excel.errorUnknownItem'), 'error');
error = {
banner: category,
line: index,
name: fullName,
type,
};
step = 2;
loading = false;
throw 'unknown reward name';
}
name = weapon.id;
} else if (type === 'character') {
const character = chars.find((e) => e.name === fullName);
if (character === undefined) {
pushToast($t('wish.excel.errorUnknownItem'), 'error');
error = {
banner: category,
line: index,
name: fullName,
type,
};
step = 2;
loading = false;
throw 'unknown reward name';
}
name = character.id;
}
if (name === '') {
pushToast($t('wish.excel.errorUnknownItem'), 'error');
loading = false;
throw 'unknown reward name';
}
wishes.push([type, time, name]);
});
console.log('from excel', category, wishes.length);
await parseData(id, wishes);
}
step = 1;
loading = false;
}
function readCSV(file) { function readCSV(file) {
const reader = new FileReader(); const reader = new FileReader();
reader.onload = () => { reader.onload = () => {
@ -450,12 +528,14 @@
loading = false; loading = false;
} }
const readFunc = {
'default': readPaimonExcel,
'takagg': readGachaExportExcel,
'wishtally': readWishTallyExcel
}
try { try {
if (selectedType === 'default') { readFunc[selectedType](workbook);
readPaimonExcel(workbook);
} else {
readGachaExportExcel(workbook);
}
} catch (err) { } catch (err) {
console.log(err); console.log(err);
pushToast($t('wish.excel.errorReadExcel'), 'error'); pushToast($t('wish.excel.errorReadExcel'), 'error');
@ -546,6 +626,9 @@
> >
{$t('wish.excel.genshinwishes')} {$t('wish.excel.genshinwishes')}
</button> </button>
<button on:click={() => changeType('wishtally')} class={`pill ${selectedType === 'wishtally' ? 'active' : ''}`}>
{$t('wish.excel.wishtally')}
</button>
</div> </div>
<input on:change={onFileChange} type="file" style="display: none;" bind:this={fileInput} /> <input on:change={onFileChange} type="file" style="display: none;" bind:this={fileInput} />
<!-- <Button disabled={loading} on:click={selectFile}> <!-- <Button disabled={loading} on:click={selectFile}>