2010-06-30 18 views
17

NPOI es un puerto .NET del proyecto POI de Java, que permite leer y escribir documentos de Microsoft Excel (así como otros formatos de Office). NPOI 1.2.2 ha introducido soporte para columnas 'autosizing', mediante el cual la columna se establece al ancho de la entrada de celda más ancha en la columna. Sin embargo, hay muchos informes de que esto no funciona. Entonces, ¿es posible?¿Cómo se pueden establecer columnas para 'autosize' en documentos de Excel creados con NPOI?

+0

En mi experiencia, el uso del tipo 'mySheet.AutoSizeColumn (columnIndex);' funciona pero no en todos los casos. Si tiene una columna formateada como tabla con Filtro activado, el tamaño automático que hace dentro de Excel al hacer doble clic en el ancho al mismo tiempo que compensa el filtro en el icono desplegable. La versión del código ignora el ícono de Filtro. Tampoco funciona bien en la última columna con datos o columnas más anchos que un determinado ancho máximo al que AutoSizes. – cusman

Respuesta

30

He publicado esto solo para responderlo, a fin de proporcionar un registro. Es es posible hacer columnas autosized utilizando NPOI, pero tiene que agregar todos los datos en columnas, en lugar de filas. Una vez que todas las células se han añadido a una columna @ columnIndex a continuación, llama

mySheet.AutoSizeColumn(columnIndex) 

y pasar a la siguiente columna. No he encontrado otra manera de hacer que esta funcionalidad funcione.

+1

No agregué los datos "en columnas" como sugirió, pero el método 'AutoSizeColumn (columnIndex)' funcionó perfectamente para mí independientemente. – JohnB

+0

Impar La misma versión? – Yellowfog

+0

Creo que debe haber sido un error que se solucionó en una versión posterior porque agregué todos mis datos como filas y usé el método anterior correctamente. –

3

Como ya se ha indicado por Yellowfog el siguiente trabajo

mySheet.AutoSizeColumn(columnIndex) 

Sin embargo, algunos abiguity aparece en los mensajes. Parece que es un método que sólo funciona después de haber completado la introducción de datos, estilos, etc Así que esto va a funcionar

ISheet mySheet = hssfworkbook.CreateSheet("sheet1"); 
IRow row = mySheet.CreateRow(0); 
ICell cell = row.CreateCell(0); 
cell.SetCellValue("foo"); 
mySheet.AutoSizeColumn(0); 

pero el siguiente no tendrán ningún efecto (porque no tiene información de tamaño automático en contra)

ISheet mySheet = hssfworkbook.CreateSheet("sheet1"); 
mySheet.AutoSizeColumn(0); 
IRow row = mySheet.CreateRow(0); 
ICell cell = row.CreateCell(0); 
cell.SetCellValue("foo"); 
Cuestiones relacionadas