puede nuevas modificar libro hojas formato desde dar cálculo cuantas celdas agregar java excel

nuevas - dar formato a celdas de excel desde java



Caracteres válidos para nombres de hojas de Excel (4)

Creo que el problema es el colon, no el signo de exclamación.

Si abre Excel e intenta editar manualmente un nombre de hoja, los únicos caracteres que no le permite escribir son [] * / /? :

Si pega uno de esos caracteres, obtendrá el siguiente error: (Excel 2003)

Al cambiar el nombre de una hoja o un gráfico, ingresaste un nombre no válido. Pruebe uno de los siguientes:

  • Asegúrese de que el nombre que ingresó no exceda los 31 caracteres.
  • Asegúrese de que el nombre no contenga ninguno de los siguientes caracteres:: / /? * [o]
  • Asegúrese de no dejar el nombre en blanco.

En Java, estamos usando el siguiente paquete para crear documentos excel de manera programática:

org.apache.poi.hssf

Si intenta establecer el nombre de una hoja (NO archivo, sino hoja interna de Excel), obtendrá un error si:

  • El nombre tiene más de 31 caracteres
  • El nombre contiene cualquiera de los siguientes caracteres: / / *? []

Sin embargo, después de crear un documento con un nombre de hoja de:

@ # $% & () + ~ `" '':;,. |

No se produce ningún error, y todo parece estar bien en Java. Cuando abre el archivo Excel en Office 2003, le dará un error que le indicará que el nombre de la hoja no es válido y que lo ha cambiado por algo genérico como "Hoja 1".

No sé mucho sobre el paquete previamente indicado que estamos usando, pero parece que no está filtrando correctamente los nombres de hoja de Excel no válidos. ¿Alguna idea de cómo puedo filtrar todos los caracteres inválidos conocidos? Dudo simplemente en filtrar todos los caracteres que no sean palabras.


Esto es lo que uso en C # (debería ser similar en Java):

const string invalidCharsRegex = @"[///*''?[/]:]+"; const int maxLength = 31; string safeName = Regex.Replace(worksheetName, invalidCharsRegex, " ") .Replace(" ", " ") .Trim(); if (string.IsNullOrEmpty(safeName)) { safeName = "Default"; // cannot be empty } else if (safeName.Length > maxLength) { safeName = safeName.Substring(0, maxLength); }



Puedes usar esto:

protected Sheet createSheet(XSSFWorkbook book, String nameSheet) { return book.createSheet(WorkbookUtil.createSafeSheetName(nameSheet)); }