Trabajando con GridJs del lado del cliente
Trabajando con GridJs del lado del cliente
Desarrollamos el cliente GridJs basado en x-spreadsheet.
los principales pasos son:
- crear una instancia de x_spreadsheet
xs = x_spreadsheet(id, options)
// the parameters are:
id: the html node id ,for example :'#gridjs-demo' for the html <div id="gridjs-demo"></div>
options: the load options
for example the below code init a gridjs_spreadsheet object.
xs = x_spreadsheet('#gridjs-demo', {
updateMode:'server',
updateUrl:'/GridJs2/UpdateCell',
mode: 'edit',
showToolbar: true,
local: 'en',
showContextmenu: true
})
los parámetros para las opciones de carga:
Parámetro | Descripción | Valor predeterminado | Opcional |
---|---|---|---|
allowSelectTextInTextBoxInReadMode |
Permite seleccionar texto en controles TextBox cuando están en modo de lectura. El valor predeterminado es falso. |
false |
Sí |
checkSyntax |
Realiza comprobación de sintaxis y corrección ortográfica para la entrada del usuario en contenido de texto. Funciona con setSyntaxCheckUrl. El valor predeterminado es falso. |
false |
Sí |
loadingGif |
URL del GIF de carga al cargar imágenes/formas. El valor predeterminado es contenido/img/updating.gif. |
content/img/updating.gif |
Sí |
local |
Establecer información de localización para menús y barras de herramientas, soportando múltiples idiomas. Los valores posibles incluyen: - en, zh, es, pt, de, ru, nl (para inglés, chino, español, portugués, alemán, ruso, holandés)- ar, fr, id, it, ja (para árabe, francés, indonesio, italiano, japonés)- ko, th, tr, vi, cht (para coreano, tailandés, turco, vietnamita, chino tradicional) |
en |
Sí |
mode |
Puede ser read o edit ; read significa hoja de cálculo solo lectura; edit significa que la hoja puede ser editada. |
Ninguno | No |
searchHighlightColor |
Color de resaltado de fondo para el término de búsqueda. El color debe incluir un canal alfa para la transparencia. |
#dbe71338 |
Sí |
showCheckSyntaxButton |
Mostrar u ocultar botones de verificación de sintaxis y corrección ortográfica en la barra de herramientas. El valor predeterminado es falso. |
false |
Sí |
showContextmenu |
Mostrar u ocultar el menú contextual al hacer clic derecho en una celda. El valor predeterminado es verdadero. |
true |
Sí |
showFileName |
Mostrar u ocultar el nombre del archivo. | true |
Sí |
showFormulaExplain |
Si se muestran explicaciones de fórmulas aplicadas a esta celda cuando el mouse lo pasa por encima. Trabaja junto con setFormulaExplainUrl. El valor predeterminado es false. |
false |
Sí |
showFormulaTip |
Si se muestra la fórmula existente aplicada a esta celda cuando el mouse lo pasa por encima. El valor predeterminado es false. |
false |
Sí |
showNonEditableSymbolInCell |
Si se muestra un símbolo no editable del lado del cliente en la celda. Si se establece en true, después de hacer clic en el menú contextual derecho “Desactivar edición”, el área seleccionada que deshabilita la edición mostrará el símbolo. El valor predeterminado es false. |
false |
Sí |
showToolbar |
Si se muestra la barra de herramientas. | true |
Sí |
updateMode |
Actualmente, solo admite server . |
server |
No |
updateUrl |
Establece la URL del lado del servidor para acciones de actualización basadas en JSON. | Ninguno | No |
view |
Establece el tamaño de vista para la hoja, por ejemplo, {width: () => 1000, height: ()=> 500} . |
{width: () => document.documentElement.clientWidth, height: () => document.documentElement.clientHeight } |
Sí |
- cargar con datos json
xs.loadData(data)
// the parameters is:
data: the json data which describ the data structure for the worksheets
- establecer hoja activa por nombre de hoja
xs.setActiveSheetByName(sheetname)
// the parameters is:
sheetname: the sheet name
- establecer hoja activa por id
xs.setActiveSheet(id)
// the parameters is:
sheetname: the sheet id
- establecer celda activa
xs.setActiveCell(row,col);
// the parameters are:
row: the cell row
col: the cell column
- establecer activo para múltiples instancias
xs.setActiveForMultipleInstance(isacitve);
// the parameters are:
isacitve: whether need to do edit operation at this xs instanse
// when there are more than one GridJs instances in one page, we need to call this method.
// we only support do edit operation for one instances at a page.
// for example,if we have two instances: xs1 and xs2 in one html page.
// if we need to keep edit operation in xs1,
// we shall call:
xs1.setActiveForMultipleInstance(true);
xs2.setActiveForMultipleInstance(false);
// if we need not do any edit operation for both,
// we shall call:
xs1.setActiveForMultipleInstance(false);
xs2.setActiveForMultipleInstance(false);
- establecer información para operaciones de forma/imagen para la acción del lado del servidor
xs.setImageInfo(imageGetActionUrl, imageAddByUploadActionUrl, imageAddByUrlActionUrl, imageCopyActionUrl, zindex, loadingGif);
// the parameters are:
imageGetActionUrl: the get image action URL in the server side controller
imageAddByUploadActionUrl: the upload image action URL in the server side controller
imageAddByUrlActionUrl: the add image from URL action URL in the server side controller
imageCopyActionUrl: the copy image action URL in the server side controller
zindex: the minimum zindex of the image in the canvas
loadingGif (optional): the loading gif url when loading the image/shape .it is optional,the default value is:content/img/updating.gif
for example:
const imageurl = "/GridJs2/imageurl";
const imageuploadurl1 = "/GridJs2/AddImage";
const imageuploadurl2 = "/GridJs2/AddImageByURL";
const imagecopyurl = "/GridJs2/CopyImage";
const basiczorder = 5678;
xs.setImageInfo(imageurl, imageuploadurl1, imageuploadurl2, imagecopyurl, basiczorder);
- establecer información para la operación de descarga para la acción del lado del servidor
xs.setFileDownloadInfo(downloadActionUrl);
// the parameters are:
downloadActionUrl: the get download file action URL in the server side controller
for example:
const fileDownloadUrl = "/GridJs2/Download";
xs.setFileDownloadInfo(fileDownloadUrl);
- establecer información para la operación de objeto OLE para la acción del lado del servidor
xs.setOleDownloadInfo(oleActionUrl);
// the parameters are:
oleActionUrl: the ole object file action URL in the server side controller
for example:
const oleDownloadUrl = "/GridJs2/Ole";
xs.setOleDownloadInfo(oleDownloadUrl);
- establecer información para comprobación de sintaxis y corrección ortográfica para acción del lado del servidor
xs.setSyntaxCheckUrl(checkUrl);
// the parameters are:
checkUrl: the syntax checking & spell correction operation action URL in the server side controller
for example:
const checkurl = "/GridJs2/CheckSyntax";
xs.setSyntaxCheckUrl(checkurl);
- establecer información para explicación de fórmulas para acción del lado del servidor
xs.setFormulaExplainUrl(formulaExplainUrl);
// the parameters are:
formulaExplainUrl: the formula explanation action URL in the server side controller
for example:
const formulaExplainUrl = "/GridJs2/FormulaExplain";
xs.setFormulaExplainUrl(formulaExplainUrl);
otras API útiles
- Renderizar la vista
xs.reRender()
- obtener el id de hoja activa
xs.getActiveSheet()
- establecer nivel de zoom
xs.setZoomLevel(zoom)
// the parameters is:
zoom:the zoom level ,can be number ,for example 0.5 for zoom out, or 2 for zoom in
- establecer nombre de archivo
xs.setFileName(name)
// the parameters is:
name:the file name with extension ,for example trip.xlsx
- Función de devolución de llamada para la función de envío de correo electrónico
xs.setEmailSendCallFunction(callback)
// the parameters is:
callback: the callback function to handle email sending, receives a mailObj parameter
callback: function(mailObj) {
// mailObj properties:
// mailObj.receiver: the email address of the receiver, e.g., 'example@gmail.com'
// mailObj.type: the format of the file to be sent, can be 'html', 'xlsx', or 'pdf'
}
- si habilitar evento de tecla de ventana para GridJs
xs.enableKeyEvent(isenable)
// the parameters is:
isenable:whether the window key event is active for GridJs
//when has other controls in the same page, you may want to ignore the key event in GridJs
- desvincular todos los eventos adjuntos a GridJs, incluyendo el evento de tecla de ventana y el evento de cambio de tamaño de ventana.
xs.destroy()
- establecer filtro visible para imagen/forma
xs.setVisibleFilter((sheet,s) =>{})
// to set a function which return true(for visible) or false(for invisible) for the visible filter with the below parameters :
sheet:the sheet instance
s:the image or shape instance
for example:
//this will make visible for image/shape in sheet with name 'Sheet3' and 'Sheet1' except for the 'Rectangle' type
xs.setVisibleFilter((sheet,s) => { if (sheet.data.name==='Sheet3'||sheet.data.name==='Sheet1') return s.type!=='Rectangle'; return false; })
//this will make visible for image/shape in sheet with name 'Sheet1'
xs.setVisibleFilter((sheet,s) => { if (sheet.data.name==='Sheet1') return true; return false; })
//this will make invisible for image/shape in all sheets
xs.setVisibleFilter((sheet,s) => { return false; })
//if all the image/shape is already loaded and you want to change the visible filter at runtime,you can call the below code to trigger a reload for image/shape
xs.reRender()
- Obtener la imagen/forma seleccionada, si no se selecciona nada devolverá nulo
xs.sheet.selector.getObj()
- Mostrar u ocultar un nodo HTML en una posición de celda especificada
xs.sheet.showHtmlAtCell(isShow, html, ri, ci, deltaX, deltaY)
//the parameters are:
// - isShow: Boolean value indicating whether to show or hide the HTML content.
// - html: The HTML string to be displayed.
// - ri: Row index of the target cell.
// - ci: Column index of the target cell.
// - deltaX: (Optional) Relative X-position adjustment from the top-left corner of the cell.
// - deltaY: (Optional) Relative Y-position adjustment from the top-left corner of the cell.
// Example usage:
// Show HTML at cell A1
xs.sheet.showHtmlAtCell(true, "<span>html span</span><input length='30' id='myinput'>test</input>", 0, 0);
// Hide the HTML node
xs.sheet.showHtmlAtCell(false);
// Note: When an HTML node is shown, the default GridJS event handling is disabled to allow interaction with the HTML content.
// This means you cannot select any cells or perform edit operations until the HTML node is hidden.
- Establecer el estado seleccionable para imagen/forma
const shape=xs.sheet.selector.getObj();
shape.setControlable(isenable)
// the parameter is:
isenable: when set to true,the image or shape can be selectable and movable/resizeable
- Obtener el objeto de celda
xs.sheet.data.getCell(ri,ci)
// the parameters are:
ri:row index
ci:column index
- Obtener el estilo de celda
xs.sheet.data.getCellStyle(ri,ci)
// the parameters are:
ri:row index
ci:column index
- Establecer el valor de celda
xs.sheet.data.setCellText(ri,ci,value,state)
// the parameters are:
ri:row index
ci:column index
value:the cell value
state: input | finished ,if finished ,it will do update action to servside
- Obtener/Establecer el rango de celdas seleccionadas
xs.sheet.data.selector.range
- Establecer el valor de celda para la celda seleccionada o el área de celdas
xs.sheet.data.setSelectedCellText(value)
// the parameters are:
value:the value for the cell
- Establecer el estilo para la celda seleccionada o el área de celdas
xs.sheet.data.setSelectedCellAttr(attributename,value)
// the parameters are:
attributename:font-name | font-bold | font-italic | font-size | format|border|merge|formula |strike|textwrap |underline |align |valign |color|bgcolor|pattern
value:the value for the attribute
- Fusionar el área de celdas seleccionadas
xs.sheet.data.merge()
- Separar la fusión del área de celdas seleccionadas
xs.sheet.data.unmerge()
- Eliminar la celda seleccionada
xs.sheet.data.deleteCell(type)
// the parameters are:
type:all|format all: means delete the cell and clear the style ;format means delete the cell value and keep the cell style
- Establecer el panel congelado
xs.sheet.data.setFreeze(ri,ci)
// the parameters are:
ri:row index
ci:column index
- Insertar filas o columnas en la celda seleccionada
xs.sheet.data.insert(type, n)
// the parameters are:
type: row | column
n:the row or column number
- Eliminar filas o columnas en la celda seleccionada
xs.sheet.data.delete(type)
// the parameters are:
type: row | column
- Establecer el ancho de la columna
xs.sheet.data.setColWidth(ci,width)
// the parameters are:
ci:column index
width:the width for the column
- Establecer el ancho de las columnas
xs.sheet.data.setColsWidth(sci,eci,width)
// the parameters are:
sci:the start column index
eci:the end column index
width:the width for the column
- Establecer el ancho de todas las columnas
xs.sheet.data.setAllColsWidth(width)
// the parameters are:
width:the width for the columns
- Obtener el ancho de la columna
xs.sheet.data.cols.sumWidth(min,max)
// the parameters are:
min:the start column index
max:the end column index,not include
- Establecer la altura de la fila
xs.sheet.data.setRowHeight(ri,height)
// the parameters are:
ri:row index
height:the height for the row
- Establecer la altura de las filas
xs.sheet.data.setRowsHeight(sri,eri,height)
// the parameters are:
sri:start row index
eri:end row index
height:the height for the rows
- Establecer la altura de todas las filas
xs.sheet.data.setAllRowsHeight(height)
// the parameters are:
height:the height for the rows
- Obtener la altura de la fila
xs.sheet.data.rows.sumHeight(min,max)
// the parameters are:
min:the start row index
max:the end row index,not include
- Obtener/Establecer la dirección de visualización
xs.sheet.data.displayRight2Left
Llamada de evento
- Podemos rastrear los eventos a continuación
xs.on('cell-selected', (cell, ri, ci) => {
console.log('cell selected:', cell, ', ri:', ri, ', ci:', ci);
if (ci === -1) {
console.log('ci === -1 means a row selected ',ri);
}
if (ri === -1) {
console.log('ri === -1 means a column selected',ci);
}
}).on('cells-selected', (cell, range) => {
console.log('range selected:', cell, ', rang:', range);
}).on('object-selected', (shapeOrImageObj) => {
console.log('shape or image selected id:', shapeOrImageObj.id, ', type: ', shapeOrImageObj.type);
}).on('sheet-selected', (id,name) => {
console.log('sheet selected id:', id, ', name: ',name);
}).on('sheet-loaded', (id,name) => {
console.log('sheet load finished:', id, ', name: ',name);
}).on('cell-edited', (text, ri, ci) => {
//just edit the cell
console.log('text:', text, ', ri: ', ri, ', ci:', ci);
}).on('cells-updated', (name, cells) => {
//cell value got updated
console.log('cells updated for sheet name:', name);
cells.forEach((acell, index, array) => {
console.log('acell got updated:', acell);
})
}).on('cells-deleted', (range) => {
console.log('cells deleted :', range);
}).on('rows-deleted', (ri, n) => {
console.log('rows-deleted :', ri, ",size", n);
}).on('columns-deleted', (ci, n) => {
console.log('columns-deleted :', ci, ",size", n);
}).on('rows-inserted', (ri, n) => {
console.log('rows-inserted :', ri, ",size", n);
}).on('columns-inserted', (ci, n) => {
console.log('columns-inserted :', ci, ",size", n);
});
- Evento de pre-verificación si devuelve false, la operación de inserción/eliminación no continuará.
xs.checkRowInsert = (ri, size) => { if (ri % 2 == 1) return true; else return false; };
xs.checkColumnInsert = (ci, size) => { if (ci % 2 == 1) return true; else return false; };
xs.checkRowDelete = (ri, size) => { if (ri % 2 == 1) return true; else return false; };
xs.checkColumnDelete = (ci, size) => { if (ci % 2 == 1) return true; else return false; };
Personalización
- Establecer ícono de inicio y enlace
xs.sheet.menubar.icon.setHomeIcon(iconUrl,targetUrl)
// the parameters are:
iconUrl:the home icon URL
targetUrl:the target link URL
for example ,the below code will set the new logo and with link to google.com
xs.sheet.menubar.icon.setHomeIcon('https://forum.aspose.com/letter_avatar_proxy/v4/letter/y/3e96dc/45.png','https://www.google.com')
- Mostrar la barra de menú
xs.sheet.menubar.show()
- Ocultar la barra de menú
xs.sheet.menubar.hide()
APIs para el objeto TextBox
TextBox es un tipo especial de forma cuya propiedad de tipo es:“TextBox” por ejemplo: el código a continuación mostrará qué forma es cuadro de texto
for (let shape of xs.sheet.data.shapes) {
if (shape.type === 'TextBox') {
console.log(shape.id + ' is a textbox');
}
}
- Cambiar el color de fondo para el objeto de cuadro de texto
setBackgroundColor(color)
// the parameters are:
color: the html color value in hex string value
//for example,we assume shape 0 is a textbox object,this will set the background color to Yellow
const textbox=xs.sheet.data.shapes[0];
textbox.setBackgroundColor('#FFFF00');
- Cambiar automáticamente el color de fondo y el color del texto para obtener un efecto visual activo
setActiveEffect(boolvalue)
// the parameters are:
boolvalue: if true,will change background color and the text color of the textbox object;if false,restore to original appearence
- Ocultar/mostrar el contenido de texto en el objeto de cuadro de texto
hideText(boolvalue)
// the parameters are:
boolvalue: if true,will not display the text in the textbox object;if false,restore to original appearence
para información detallada, puede consultar el ejemplo aquí https://github.com/aspose-cells/Aspose.Cells-for-.NET/tree/master/Examples_GridJs