X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=Pman.Gnumeric.js;h=d581916182fecf451e94a76e7267b087e806c801;hb=1524f8b36295809a3eedd6da3c6494f8aa0d86f5;hp=fb38b61bbe54450312bb2afddd129a19be7199fe;hpb=6c999488c38ed53187cc8610917c07ffad9d4dc3;p=Pman.Core diff --git a/Pman.Gnumeric.js b/Pman.Gnumeric.js index fb38b61b..d5819161 100644 --- a/Pman.Gnumeric.js +++ b/Pman.Gnumeric.js @@ -58,7 +58,7 @@ Pman.Gnumeric = function (cfg) * Fires when source document has been loaded * @param {Pman.Gnumerci} this */ - "load" : true + 'load' : true }); Roo.util.Observable.call(this,cfg); @@ -148,6 +148,13 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { rowOffset : 0, + /** + * @type {String} format - either XLSX (if images are used) or XLS - as ssconvert does not do images that well. + */ + + format : 'xlsx', + + /** * load: * run the connection, parse document and fire load event.. @@ -311,21 +318,22 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { Roo.each(merge, function(c) { var rc = _t.rangeToRC(c.textContent); - //Roo.log(JSON.stringify(rc)) + //Roo.log(JSON.stringify(rc)); if (typeof(_t.grid[rc[0].r][rc[0].c]) == 'undefined') { - _t.grid[rc[0].r][rc[0].c] = Roo.applyIf({ r : rc[0].r, c : rc[0].c }, _t.defaultCell); + //Roo.log(["creating empty cell for ",rc[0].r, rc[0].c ]); + _t.createCell(rc[0].r, rc[0].c ); + //_t.grid[rc[0].r][rc[0].c] = //Roo.applyIf({ r : rc[0].r, c : rc[0].c }, _t.defaultCell); } _t.grid[rc[0].r][rc[0].c].colspan = (rc[1].c - rc[0].c) + 1; _t.grid[rc[0].r][rc[0].c].rowspan = (rc[1].r - rc[0].r) + 1; for(var r = (rc[0].r); r < (rc[1].r+1); r++) { - for(var c = rc[0].c; c < (rc[1].c+1); c++) { + for(var cc = rc[0].c; cc < (rc[1].c+1); cc++) { //Roo.log('adding alias : ' + r+','+c); - _t.grid[r][c] = _t.grid[rc[0].r][rc[0].c]; + _t.grid[r][cc] = _t.grid[rc[0].r][rc[0].c]; } } - }); // read colinfo.. var ci = this.sheet.getElementsByTagNameNS('*','ColInfo'); @@ -378,15 +386,22 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { continue; } for (var c = s.c; c < s.c1;c++) { - if (c > _t.cmax) continue; + if (c > _t.cmax) { + continue; + } - if (typeof(_t.grid[r][c]) == 'undefined') _t.grid[r][c] = Roo.applyIf({ r: r , c : c }, _t.defaultCell); + if (typeof(_t.grid[r][c]) == 'undefined') { + _t.createCell(r,c); + //_t.grid[r][c] = Roo.applyIf({ r: r , c : c }, _t.defaultCell); + } var g=_t.grid[r][c]; if (typeof(g.cls) =='undefined') { g.cls = []; g.styles = []; } - if (g.cls.indexOf(s.name) > -1) continue; + if (g.cls.indexOf(s.name) > -1) { + continue; + } g.cls.push(s.name); g.styles.push(s.dom); @@ -416,23 +431,23 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { }, Fore : function(ent,v) { var col=[]; - Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); }) + Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); }); ent['color'] = 'rgb(' + col.join(',') + ')'; }, Back : function(ent,v) { var col=[]; - Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); }) + Roo.each(v.split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); }); ent['background-color'] = 'rgb(' + col.join(',') + ')'; }, FontUnit : function(ent,v) { ent['font-size'] = v + 'px'; }, FontBold : function(ent,v) { - if (v*1 < 1) return; + if (v*1 < 1) { return; } ent['font-weight'] = 'bold'; }, FontItalic : function(ent,v) { - if (v*0 < 1) return; + if (v*0 < 1) { return; } //ent['font-weight'] = 'bold'; }, FontName : function(ent,v) { @@ -446,10 +461,10 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { BorderColor : function(ent,v) { var vv = v.split('-'); var col=[]; - Roo.each(vv[1].split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); }) + Roo.each(vv[1].split(':'), function(c) { col.push(Math.round(parseInt(c,16)/256)); }); ent['border-'+vv[0]+'-color'] = 'rgb(' + col.join(',') + ')'; } - } + }; function add(e, k, v) { //Roo.log(k,v); e.gstyle[k] = v; @@ -529,7 +544,9 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { set : function(cell, v, vt, vf) { var cs= typeof(cell) == 'string' ? this.toRC(cell) : cell; - //Roo.log( cs.r+ ',' + cs.c + ' = '+ v); + + + Roo.log( cs.r+ ',' + cs.c + ' = '+ v); // need to generate clell if it doe if (typeof(this.grid[cs.r]) == 'undefined') { Roo.log('no row:' + cell); @@ -540,13 +557,20 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { Roo.log('cell not defined:' + cell); this.createCell(cs.r,cs.c); } + // cell might not be rendered yet... so if we try and create a cell, it overrides the default formating.. + if (typeof(this.grid[cs.r][cs.c].dom) == 'undefined') { Roo.log('no default content for cell:' + cell); - this.createCell(cs.r,cs.c); + Roo.log(this.grid[cs.r][cs.c]); + //this.createCell(cs.r,cs.c); //return; } this.grid[cs.r][cs.c].value= v; - this.grid[cs.r][cs.c].dom.textContent= v; + if (this.grid[cs.r][cs.c].dom) { + this.grid[cs.r][cs.c].dom.textContent= v; + } + + if (typeof(vt) != 'undefined') { this.grid[cs.r][cs.c].valueType = vt; this.grid[cs.r][cs.c].dom.setAttribute('ValueType', vt); @@ -682,7 +706,9 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { data = data || this.data; for (var r = 0; r < this.rmax;r++) { - if (typeof(this.grid[r]) == 'undefined') continue; + if (typeof(this.grid[r]) == 'undefined') { + continue; + } for (var c = 0; c < this.cmax;c++) { if (typeof(this.grid[r][c]) == 'undefined') { continue; @@ -712,24 +738,49 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { { // read the first row. var tds = Roo.get(table).select('tr').item(0).select('td'); - var nc = 0; - tds.each(function(td) { - var cs = td.dom.getAttribute('colspan'); - cs = cs ? cs * 1 : 1; - nc += cs; + var maxnc = 0; + + Roo.get(table).select('tr').each(function(trs) { + var nc = 0; + + trs.select('td').each(function(td) { + var cs = td.dom.getAttribute('colspan'); + cs = cs ? cs * 1 : 1; + nc += cs; + }); + maxnc = Math.max(nc, maxnc); }); + var tr = document.createElement('tr'); table.appendChild(tr); - var ar = {} - for (i =0; i < nc; i++) { + var ar = {}; + for (i =0; i < maxnc; i++) { ar[i] = document.createElement('td'); tr.appendChild(ar[i]); } // find the left. - var ret = { cols : nc, pos : {} }; - for (i =0; i < nc; i++) { + var ret = { cols : maxnc, pos : {} }; + for (i =0; i < maxnc; i++) { ret.pos[ Roo.get(ar[i]).getLeft()] =i; } + ret.near = function(p) { + // which one is nearest.. + + if (this.pos[p]) { + return this.pos[p]; + } + var prox = 100000; + var match = 0; + for(var i in this.pos) { + var dis = Math.abs(p-i); + if (dis < prox) { + prox = dis; + match = this.pos[i]; + } + } + return match; + + } table.removeChild(tr); return ret; }, @@ -789,14 +840,13 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { this.setRowHeight( row + yoff +1, Roo.get(rows[row]).getHeight()); } - var cols = rows[row].getElementsByTagName('td'); - for(var col=0;col < cols.length; col++) { - - + if (cols[col].getAttribute('xls:width')) { + this.setColumnWidth(col, 1 * cols[col].getAttribute('xls:width')); + } var colspan = cols[col].getAttribute('colspan'); colspan = colspan ? colspan *1 : 1; @@ -804,7 +854,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { var rowspan = cols[col].getAttribute('rowspan'); rowspan = rowspan ? rowspan * 1 : 1; - var realcol = table_data.pos[ Roo.get(cols[col]).getLeft() ]; + var realcol = table_data.near( Roo.get(cols[col]).getLeft() ); @@ -915,7 +965,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { var rcs = []; ar = ar.slice(0,3); Roo.each(ar, function(c) { - rcs.push((c*256).toString(16)) ; + rcs.push((c*c).toString(16)) ; }); return rcs.join(':'); @@ -932,17 +982,18 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { 'color': function(ent,v) { ent['Fore'] = toCol(v); - }, - 'background-color' : function(ent,v) { - ent['Back'] = toCol(v); - if (ent['Back']) != '0:0:0') { + // this is a bit dumb.. we assume that if it's not black text, then it's shaded.. + if (ent['Fore'] != '0:0:0') { ent['Shade'] = 1; } - + }, + 'background-color' : function(ent,v) { + ent['Back'] = toCol(v); + } - } + }; var ent = { HAlign:"1", @@ -985,14 +1036,18 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { ent['Unit'] = v.replace(/px/, ''); }, 'font-weight' : function(ent,v) { - if (v != 'bold') return; + if (v != 'bold') { + return; + } ent['Bold'] = 1; }, 'font-style' : function(ent,v) { - if (v != 'italic') return; + if (v != 'italic') { + return; + } ent['Italic'] = 1; } - } + }; var fent = { Unit:"10", @@ -1034,7 +1089,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { sr.appendChild(st); // do we need some defaults.. for(var k in ent) { - Roo.log(k); + //Roo.log(k); st.setAttribute(k, ent[k]); } @@ -1065,7 +1120,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { // start adding them all together.. if (sb) { - st.appendChild(sb) + st.appendChild(sb); } @@ -1073,7 +1128,106 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { }, - + /** + * writeImageOld: + * write an image in old gnumberic format (needs base64 data to write it) + * + * + * @param {Number} row row to put it in (rows start at 0) + * @param {Number} col column to put it in + * @param {Number} data the base64 description of the images + * @param {Number} width image width + * @param {Number} width image height + * + */ + writeImageOld : function (row, col, data, width, height, type, size) + { + + if (!data) { + throw "write Image called with missing data"; + } + + row*=1; + col*=1; + height*=1; + width*=1; + var objs = this.sheet.getElementsByTagNameNS('*','Objects')[0]; + var soi = this.doc.createElementNS('http://www.gnumeric.org/v10.dtd', 'gnm:SheetObjectImage'); + + var colwidth = 0; + var endcol=col; + for ( endcol=col;endcol <100; endcol++) { + if (!this.colInfo[endcol]) { + this.colInfo[endcol] = 100; // eak fudge + } + colwidth += this.colInfo[endcol]; + if (colwidth > width) { + break; + } + } + + soi.setAttribute('ObjectBound', this.RCtoCell(row,col) + ':' + this.RCtoCell(row,endcol)); + + var ww = 0.01; // offset a bit... + var hh = 0.01; // + + var rowHeight = typeof(this.rowInfoDom[row]) == 'undefined' ? 100 : + this.rowInfoDom[row].getAttribute('Unit')*1; + + + var ww2 = 1 - ((colwidth - width) / this.colInfo[endcol]); + var hh2 = 1 - ((rowHeight - height) / rowHeight); + + var offset_str = ww + ' ' + hh + ' ' + ww2 + ' '+hh2; + + // offset string 0.01 0.01 0.01 0.392 << last one needs to be calculated based on proportions. + // so what are our dimentions.. + + + + + + //alert(offset_str); + soi.setAttribute('ObjectOffset', offset_str); + soi.setAttribute('ObjectAnchorType','16 16 16 16'); + soi.setAttribute('Direction','17'); + soi.setAttribute('crop-top','0.000000'); + soi.setAttribute('crop-bottom','0.000000'); + soi.setAttribute('crop-left','0.000000'); + soi.setAttribute('crop-right','0.000000'); + + + + + + var content = this.doc.createElement('Content'); + content.setAttribute('image-type', type ? type : 'jpeg'); + content.setAttribute('size-bytes', size); + content.appendChild( this.doc.createTextNode(data)); + soi.appendChild(content); + objs.appendChild(soi); + + if (typeof(this.grid[row]) == 'undefined') { + this.grid[row] = []; + } + if (typeof(this.grid[row][col]) == 'undefined') { + this.createCell(row,col); + } + + this.grid[row][col].value= data; + this.grid[row][col].valueFormat = 'image'; + this.grid[row][col].imageType = type; + this.grid[row][col].width = width; + this.grid[row][col].height = height; + + var godoc = this.doc.getElementsByTagNameNS('*','GODoc')[0]; + + if(godoc && godoc.parentNode) { + godoc.parentNode.removeChild(godoc); + } + + return true; + }, /** * writeImage: @@ -1088,10 +1242,12 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { * */ - - writeImage : function (row, col, data, width, height) + writeImage : function (row, col, data, width, height, type) { + if (!data) { + throw "write Image called with missing data"; + } // our default height width is 50/50 ?! //console.log('w='+width+',height='+height); // @@ -1124,7 +1280,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { // step 1 - work out how many columns it will span.. // lets hope the spreadsheet is big enought.. var colwidth = 0; - var endcol=col + var endcol=col; for ( endcol=col;endcol <100; endcol++) { if (!this.colInfo[endcol]) { this.colInfo[endcol] = 100; // eak fudge @@ -1134,7 +1290,6 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { break; } } - soi.setAttribute('ObjectBound', //gnumeric_colRowToName(row,col) + ':' + gnumeric_colRowToName(row+1,col+1)); @@ -1143,11 +1298,15 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { var ww = 0.01; // offset a bit... var hh = 0.01; // + var rowHeight = typeof(this.rowInfoDom[row]) == 'undefined' ? 100 : + this.rowInfoDom[row].getAttribute('Unit')*1; + + var ww2 = 1 - ((colwidth - width) / this.colInfo[endcol]); - var hh2 = 0.99; + var hh2 = 1 - ((rowHeight - height) / rowHeight); var offset_str = ww + ' ' + hh + ' ' + ww2 + ' '+hh2; - //console.log(offset_str ); + //alert(offset_str); soi.setAttribute('ObjectOffset', offset_str); soi.setAttribute('ObjectAnchorType','16 16 16 16'); @@ -1157,19 +1316,165 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { soi.setAttribute('crop-left','0.000000'); soi.setAttribute('crop-right','0.000000'); // ...... < / Content> + + var name = 'Image' + Math.random().toString(36).substring(2); var content = this.doc.createElement('Content'); - content.setAttribute('image-type','jpeg'); - //alert(imgsrc); - - content.setAttribute('size-bytes',data.length); - content.textContent = data; + content.setAttribute('image-type', type ? type : 'jpeg'); + content.setAttribute('name', name); soi.appendChild(content); objs.appendChild(soi); + + var godoc = this.doc.getElementsByTagNameNS('*','GODoc')[0]; + + var goimage = this.doc.createElement('GOImage'); + goimage.setAttribute('image-type', type ? type : 'jpeg'); + goimage.setAttribute('name', name); + goimage.setAttribute('type', 'GOPixbuf'); + goimage.setAttribute('width', width); + goimage.setAttribute('height', height); + goimage.textContent = data; + + godoc.appendChild(goimage); + + if (typeof(this.grid[row]) == 'undefined') { + this.grid[row] = []; + } + if (typeof(this.grid[row][col]) == 'undefined') { + this.createCell(row,col); + } + + this.grid[row][col].value= data; + this.grid[row][col].valueFormat = 'image'; + this.grid[row][col].imageType = type; + this.grid[row][col].width = width; + this.grid[row][col].height = height; + return true; //< /gnm:SheetObjectImage> // < /gnm:Objects> }, + + /** + * writeFixedImageOld: + * write an image in old gnumberic format (needs base64 data to write it) + */ + writeFixedImageOld : function (startCol, startRow, endCol, endRow, type, data, width, height, size) + { + if (!data) { + throw "write Image called with missing data"; + } + + startCol = startCol * 1; + startRow = startRow * 1; + endCol = endCol * 1; + endRow = endRow * 1; + width = width * 1; + height = height * 1; + + var objs = this.sheet.getElementsByTagNameNS('*','Objects')[0]; + var soi = this.doc.createElementNS('http://www.gnumeric.org/v10.dtd', 'gnm:SheetObjectImage'); + + soi.setAttribute('ObjectBound',this.RCtoCell(startRow, startCol) + ':' + this.RCtoCell(endRow, endCol)); + + soi.setAttribute('ObjectOffset', '0 0 0 0'); + soi.setAttribute('ObjectAnchorType','16 16 16 16'); + soi.setAttribute('Direction','17'); + soi.setAttribute('crop-top','0.000000'); + soi.setAttribute('crop-bottom','0.000000'); + soi.setAttribute('crop-left','0.000000'); + soi.setAttribute('crop-right','0.000000'); + + var content = this.doc.createElement('Content'); + content.setAttribute('image-type', type ? type : 'jpeg'); + content.setAttribute('size-bytes', size); + content.appendChild( this.doc.createTextNode(data)); + soi.appendChild(content); + objs.appendChild(soi); + + if (typeof(this.grid[startRow]) == 'undefined') { + this.grid[startRow] = []; + } + if (typeof(this.grid[startRow][startCol]) == 'undefined') { + this.createCell(startRow,startCol); + } + + this.grid[startRow][startCol].value= data; + this.grid[startRow][startCol].valueFormat = 'image'; + this.grid[startRow][startCol].imageType = type; + this.grid[startRow][startCol].width = width; + this.grid[startRow][startCol].height = height; + + var godoc = this.doc.getElementsByTagNameNS('*','GODoc')[0]; + + if(godoc && godoc.parentNode) { + godoc.parentNode.removeChild(godoc); + } + + return true; + }, + + writeFixedImage : function (startCol, startRow, endCol, endRow, type, data, width, height) + { + if (!data) { + throw "write Image called with missing data"; + } + + startCol = startCol * 1; + startRow = startRow * 1; + endCol = endCol * 1; + endRow = endRow * 1; + width = width * 1; + height = height * 1; + + var objs = this.sheet.getElementsByTagNameNS('*','Objects')[0]; + var soi = this.doc.createElementNS('http://www.gnumeric.org/v10.dtd', 'gnm:SheetObjectImage'); + + soi.setAttribute('ObjectBound',this.RCtoCell(startRow, startCol) + ':' + this.RCtoCell(endRow, endCol)); + + soi.setAttribute('ObjectOffset', '0 0 0 0'); + soi.setAttribute('ObjectAnchorType','16 16 16 16'); + soi.setAttribute('Direction','17'); + soi.setAttribute('crop-top','0.000000'); + soi.setAttribute('crop-bottom','0.000000'); + soi.setAttribute('crop-left','0.000000'); + soi.setAttribute('crop-right','0.000000'); + + var name = 'Image' + Math.random().toString(36).substring(2); + var content = this.doc.createElement('Content'); + content.setAttribute('image-type', type ? type : 'jpeg'); + content.setAttribute('name', name); + + soi.appendChild(content); + objs.appendChild(soi); + + var godoc = this.doc.getElementsByTagNameNS('*','GODoc')[0]; + + var goimage = this.doc.createElement('GOImage'); + goimage.setAttribute('image-type', type ? type : 'jpeg'); + goimage.setAttribute('name', name); + goimage.setAttribute('type', 'GOPixbuf'); + goimage.setAttribute('width', width); + goimage.setAttribute('height', height); + goimage.textContent = data; + + godoc.appendChild(goimage); + + if (typeof(this.grid[startRow]) == 'undefined') { + this.grid[startRow] = []; + } + if (typeof(this.grid[startRow][startCol]) == 'undefined') { + this.createCell(startRow,startCol); + } + + this.grid[startRow][startCol].value= data; + this.grid[startRow][startCol].valueFormat = 'image'; + this.grid[startRow][startCol].imageType = type; + this.grid[startRow][startCol].width = width; + this.grid[startRow][startCol].height = height; + + return true; + }, /** * mergeRegion: @@ -1188,7 +1493,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { // return; //} - cell.textContent = this.RCtoCell(row1,col1) + ':' + this.RCtoCell(row2,col2) + cell.textContent = this.RCtoCell(row1,col1) + ':' + this.RCtoCell(row2,col2); //var merges = this.gnumeric.getElementsByTagNameNS('*','MergedRegions'); var merges = this.sheet.getElementsByTagNameNS('*','MergedRegions'); @@ -1198,7 +1503,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { this.sheet.insertBefore(merges,sl); } else { merges = merges[0]; - } + } merges.appendChild(cell); }, @@ -1261,7 +1566,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { sheetnames = this.doc.getElementsByTagNameNS('*','Sheet'); sheetnames[0].parentNode.appendChild(sheetnames[sheetnames.length-1].cloneNode(true)); var sn = this.doc.getElementsByTagNameNS('*','Sheet')[sheet]; - var cls = sn.getElementsByTagNameNS('*','Cells')[0] + var cls = sn.getElementsByTagNameNS('*','Cells')[0]; while (cls.childNodes.length) { cls.removeChild(cls.firstChild); } @@ -1289,7 +1594,7 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { column = column *1; width= width*1; if (typeof(this.colInfoDom[column]) == 'undefined') { - var cols = this.doc.getElementsByTagNameNS('*','Cols')[0]; + var cols = this.sheet.getElementsByTagNameNS('*','Cols')[0]; var ri = this.doc.createElementNS('http://www.gnumeric.org/v10.dtd', 'gnm:ColInfo'); ri.setAttribute('No', column); ri.setAttribute('Unit', width); @@ -1332,12 +1637,52 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { for (var r = 0; r < this.rmax;r++) { out += ''; for (var c = 0; c < this.cmax;c++) { - var g = (typeof(grid[r][c]) == 'undefined') ? defaultCell : grid[r][c]; + if (typeof(grid[r][c]) == 'undefined') { + this.createCell(r,c); + + } + var g = grid[r][c]; - if (typeof(g.cls) =='undefined') g.cls = []; + if (typeof(g.cls) =='undefined') { + g.cls = []; + } var w= calcWidth(c,g.colspan); + + var value = g.value[0] == '=' ? 'CALCULATED' : g.value; + + try { + if( + g.styles[0].firstElementChild.getAttribute('Format') == "D\\-MMM\\-YYYY;@" && + g.value[0] != '=' && + !isNaN(value * 1) && + value != 0 + ){ + value = new Date(value * 24 * 60 * 60 * 1000 + new Date('1899-12-30').getTime()).format('d-M-Y'); + } + + } catch(e) { + + } + + if(g.valueFormat == 'image') { + + out+=String.format('
', + g.colspan, g.rowspan, g.cls.join(' '), + 'overflow:hidden;' + + 'width:'+g.width+'px;' + + + 'text-overflow:ellipsis;' + + 'white-space:nowrap;', + g.imageType, + value, g.width, g.height + + ); + c+=(g.colspan-1); + continue; + } + out+=String.format('
{2}
', - g.colspan, g.rowspan, g.value, + g.colspan, g.rowspan, value, 'overflow:hidden;' + 'width:'+w+'px;' + @@ -1366,26 +1711,33 @@ Roo.extend(Pman.Gnumeric, Roo.util.Observable, { { name = name || "Missing_download_filename"; - if (this.downloadURL && this.downloadURL.charAt(this.downloadURL .length-1) != '/') { + if (this.downloadURL && this.downloadURL.charAt(this.downloadURL.length-1) != '/') { this.downloadURL += '/'; } var ser = new XMLSerializer(); + Roo.get(document.body).mask("Downloading"); var x = new Pman.Download({ method: 'POST', + timeout : 120000, // quite a long wait.. 2 minutes. params : { xml : ser.serializeToString(this.doc), - format : 'xls', //xml + format : this.format, debug : 0 }, url : (this.downloadURL || (baseURL + '/GnumericToExcel/')) + name + '.xls', success : function() { + Roo.get(document.body).unmask(); Roo.MessageBox.alert("Alert", "File should have downloaded now"); if (callback) { callback(); } - } + }, + failure : function() { + Roo.get(document.body).unmask(); + Roo.MessageBox.alert("Alert", "Download failed"); + } }); }