* Fires when source document has been loaded
* @param {Pman.Gnumerci} this
*/
- "load" : true
+ 'load' : true
});
Roo.util.Observable.call(this,cfg);
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');
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);
},
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) {
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;
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);
+ Roo.log('no row:' + cell);
this.grid[cs.r] = []; // create a row..
//return;
}
if (typeof(this.grid[cs.r][cs.c]) == 'undefined') {
- //Roo.log('cell not defined:' + cell);
+ 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('no default content for cell:' + cell);
+ 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);
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;
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;
}
- }
+ };
var ent = {
HAlign:"1",
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",
},
-
+ /**
+ * 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 ww2 = 1 - ((colwidth - width) / this.colInfo[endcol]);
+ var hh2 = 0.99;
+
+ var offset_str = ww + ' ' + hh + ' ' + ww2 + ' '+hh2;
+
+ //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);
+ 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:
* @param {Number} width image height
*
*/
-
-
- 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);
// <gmr:Objects>
// 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
break;
}
}
-
soi.setAttribute('ObjectBound',
//gnumeric_colRowToName(row,col) + ':' + gnumeric_colRowToName(row+1,col+1));
var hh2 = 0.99;
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');
soi.setAttribute('crop-left','0.000000');
soi.setAttribute('crop-right','0.000000');
// <Content image-type="jpeg" size-bytes="3900">...... < / 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.textContent = 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:
// 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');
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);
}
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);
for (var r = 0; r < this.rmax;r++) {
out += '<tr style="height:'+this.rowInfo[r]+'px;">';
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('<td colspan="{0}" rowspan="{1}" class="{2}"><div style="{3}"><img src="data:image/{4};base64, {5}" width="{6}" height="{7}"></div></td>',
+ 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('<td colspan="{0}" rowspan="{1}" class="{4}"><div style="{3}">{2}</div></td>',
- g.colspan, g.rowspan, g.value,
+ g.colspan, g.rowspan, value,
'overflow:hidden;' +
'width:'+w+'px;' +
{
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();
var x = new Pman.Download({
method: 'POST',
+ timeout : 120000, // quite a long wait.. 2 minutes.
params : {
xml : ser.serializeToString(this.doc),
format : 'xls', //xml