Простое вводное введение
Не так давно мы сами взялись за разработку front-end и back-end продуктов, и с тех пор живем жалкой жизнью, печатая код и радостно получая знания.
Это был ничем не примечательный понедельник, полдень
Сестра пользователя сказала в группе, что период действия рабочей карты не так просто проверить системой. (Система: Нет-нет, это не мой горшок.
Я просмотрел базу данных и обнаружил, что наш исходный формат даты истечения срока действия выглядит следующим образом.
аккуратно и аккуратно.
Данные в базе на тот момент такие
даже так
Глядя на эту ситуацию, я думаю, должно быть, вход неправильный (молодой...
Поэтому я решил начать с Excel
Процесс работы дам и сестер заключается в том, чтобы использовать нашу систему для экспорта копии Excel сначала, а затем импортировать ее в систему после редактирования.Пока я ограничиваю формат одного столбца этой рабочей карты на сегодняшний день, он будет обязательно в едином формате, гм.
Наш проект использует js-xlsx для обработки импорта и экспорта таблиц Ниже приведен псевдокод для экспорта Excel:
import * as XLSX from 'xlsx';
const xlsxMineType = 'application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet'
const data = 数据.map((s: any) => ({
ID: s.id,
工卡有效期: s.card_expired,
……
}));
const sheet = XLSX.utils.json_to_sheet(data);
const wb = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(wb, sheet, '员工信息表');
const wbbuf = XLSX.write(wb, {
type: 'base64'
});
this.success({ name: "员工信息表.xlsx", data: wbbuf, type:xlsxMineType });
Вы можете получить объект, содержащий информацию о ячейке, через json_to_sheet
{
A2: { t: 'n', v: 3776 },
B2: { t: 's', v: '2019-04-01' },
A3: { t: 'n', v: 3831 },
B3: { t: 's', v: '2019-04-01' },
A1: { t: 's', v: 'ID' },
B1: { t: 's', v: '工卡有效期' },
'!ref': 'A1:B3'
}
В объекте в качестве ключа используется позиция ячейки, а в качестве значения — значение (v), тип (t) и другие атрибуты каждой ячейки. Тип ячейки поддерживает:
b
Boolean, n
Number, e
error, s
String, d
Date
Кажется, что тип Date очень хорошо соответствует вышеуказанным требованиям, поэтому я попробовал:
const sheet = XLSX.utils.json_to_sheet(data);
// 筛选出除表头的工卡列
Object.keys(sheet).filter(item => /^B/.test(item) && item !== "B1").forEach(key => {
sheet[key].t = "d";
})
Однако, если срок действия рабочей карточки уже пуст, то экспорт и открытие Excel сообщит об ошибке, а пустая позиция станет NaN
Прочитав различные китайские и английские документы, проблемы и экспортировав более 100 информационных листов сотрудников, я обнаружил, что Excel действительно великолепен.Возможно, импортированные данные должны быть отформатированы в js, а не ограничивать тип ячеек.
Если вы не управляете типом ячейки, то когда администратор вводит дату, ячейка может быть: текстовой, обычной, даты, пользовательского типа, поэтому просто убедитесь, что независимо от формата ячейки программа может получить правильный Данные в порядке.
Когда тип ячейки срока действия рабочей карты, сделанный администратором, текстовый или обычный, это относительно просто.Программа может разобрать соответствующую строку, как и ожидалось, и использовать момент для ее разбора, а затем данные в нужном формат можно получить.
Затем, когда тип ячейки даты истечения срока действия является датой и пользовательским, данные, которые мы получаем, похожи на следующий рисунок.
Это происхождение странного числа в предыдущей базе данных Значение этого числа на самом деле является количеством дней от текущей даты до 0 января 1900 года. Также обратите внимание, что в Excel есть ошибка:
Он считает, что 1900 год високосный, поэтому мы получаем дополнительный день, потому что нам нужно вычесть один перед преобразованием...
item.工卡有效期 = new Date(1900, 0, expried - 1)
Тогда вы можете получить правильную дату. Бульк.