Hallo Rolf,
dein Hinweis auf jsfiddle hat mich auf den richtigen Weg gebracht.
// zur ganzen Darstellung der Lösung gehört auch das
// Einlesen der CSV-Dateien
Connects.inputLoadCSV = {
event: function(elem) {
const file = elem.files[0];
const textType =
/(text\/csv)|(application\/vnd[.]ms-excel)/;
if (file !== undefined && file.type.match(textType)) {
const reader = new FileReader();
reader.onload =
/**
*
* @param {type} elem
*/
function(elem) {
var byteBuff = reader.result;
var dataViewer = new DataView(byteBuff);
var charArr = [];
for(let i = 0; i < dataViewer.byteLength; i++) {
charArr.push(dataViewer.getUint8(i));
}
var csvText = String.fromCharCode(...charArr);
var csvArray = CSV.toArray(csvText);
HtmlTable.create(csvArray);
};
reader.readAsArrayBuffer(file);
}
if (file !== undefined) {
this.fileName.elem.textContent = file.name || '. . .';
}
}
};
Connects.btnSaveCSV = {
event: function(elem) {
var csvString = CSV.toStr(HtmlTable.TableToArray());
let charArray = [];
for (let i = 0; i < csvString.length; i++ ) {
charArray.push(csvString.codePointAt(i));
}
let bytes = Uint8Array.from(charArray);
let blob = new Blob([ bytes ], {
type: "text/csv;charset=iso-8859-15"
});
let url = window.URL.createObjectURL(blob);
saveData(url, "NewPOL.csv");
}
};
function saveData(url, fileName) {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
}
Ich habe zu viele Umwege gemacht. Blob kann auch direkt ein Uint8Array verarbeiten, scheinbar wird dann die korrekte Codierung verwendet. Zu den Excel/Access-Versionen, die verhältnismäßig aktuell, es wird direkt eine csv-Datei erzeugt. Und bei meinen Tests verwende ich vorhandene Dateien und vergleiche die Originaldatei und erzeugte Datei.
Vielen Dank an alle die geantwortet haben. Vielleicht hilft meine Lösung weiter.
UDK