I am trying to edit xlsx files in cordova based ios application. I use javascript for making changes the the OOXML of xlsx sheets. I notice a strange behavior when I try to make changes to xml from js within cordova. I have created a fiddle and I works fine. But when I use same approach in the below code, xml is not getting changes. Can any one point out where I am going wrong here.
Working fiddle -> http://ift.tt/1E9L0p8
Code where it is not working
WorkbookAccess.prototype.loadStringDataIntoSheets = function(workBookData) {
console.log("Enter @loadStringDataIntoSheets");
console.log('@--1');
var loadStringDef = $.Deferred();
//var thisClass = this;
this.loadXLSX().then( function() {
console.log('@--1.1');
if (workBookData.length == 0) {
console.log('@--2');
loadStringDef.resolve();
return loadStringDef.promise();
}
var shareStringFile = this.xlsxFile + "/" + this.getSharedStringPath();
var sharedStringFileIO = new SuperFileIO();
console.log("shareStringFile " + shareStringFile);
sharedStringFileIO.readFromFile(shareStringFile, function(xmlText) {
console.log('@--3');
var ssXmlDoc = $.parseXML(xmlText);
for (var i = 0; i < workBookData.length; i += 1) {
console.log('@--4');
var sheetPath = this.getSheetPath(workBookData[i].sheetName);
var path = sheetPath;
var rootNode = "worksheet";
var sheetFile = this.xlsxFile + "/" + path;
var fileIO = new SuperFileIO();
fileIO.readFromFile(sheetFile, function(i, sheetFile, workSheetData, ssXmlDoc, xmlText) {
(function() {
console.log('@--5');
console.log("i: " + i);
console.log("sheetFile: " + sheetFile);
console.log("workSheetData: " + JSON.stringify(workSheetData));
var xmlDoc = $.parseXML(xmlText);
for (var j = 0; j < workSheetData.length; j += 1) {
console.log("workSheetData[j] " + JSON.stringify(workSheetData[j]));
var cellAddrToSet = workSheetData[j].colLetter + workSheetData[j].rowIndex;
var newStringPosition = $(ssXmlDoc).find("si").size();
console.log("newStringPosition ### " + newStringPosition);
$(ssXmlDoc).find("sst").append('<si><t>' + workSheetData[j].value + '</t></si>');
$(xmlDoc).find('c[r=' + cellAddrToSet + ']').empty().append('<v>' + newStringPosition + '</v>').attr("t", "s");
var newSheetData = (new XMLSerializer()).serializeToString(xmlDoc);
var newSharedStringSheetData = (new XMLSerializer()).serializeToString(ssXmlDoc);
console.log("======");
//console.log(newSharedStringSheetData);
//console.log(newSheetData);
console.log("======");
}
var newSheetData = (new XMLSerializer()).serializeToString(xmlDoc);
//newSheetData = newSheetData.split('xmlns="http://ift.tt/lH0Osb"').join('');
var fileIO = new SuperFileIO();
fileIO.writeToFile(sheetFile, newSheetData, false);
var newSharedStringSheetData = (new XMLSerializer()).serializeToString(ssXmlDoc);
//newSharedStringSheetData = newSharedStringSheetData.split('xmlns="http://ift.tt/lH0Osb"').join('');
var fileIO1 = new SuperFileIO();
fileIO1.writeToFile(shareStringFile, newSharedStringSheetData, false);
if (i + 1 == workBookData.length) {
console.log('@--6');
// Time out for file to get saved
setTimeout(function() {
console.log("loadStringDataIntoSheets resolved");
loadStringDef.resolve();
}, 100);
}
})();
}.bind(this, i, sheetFile, workBookData[i].data, ssXmlDoc));
}
}.bind(this));
}.bind(this));
return loadStringDef.promise();
};
No comments:
Post a Comment