2010-01-11 38 views
9

Estoy usando VSTO para crear un complemento de Excel. Este complemento recupera y muestra una gran cantidad de datos de un servidor sql. Esto funciona muy bien, pero más adelante planeo acceder a algunos de los datos dentro de Excel y modificarlos de alguna manera. Mi problema es que necesito una forma de clasificar las celdas que quiero modificar. ¿Hay alguna forma de agregar metadatos a una celda para saber si es una celda que debe modificarse? P.ej. agregar un atributo a la celda, p. "editable_cell", y hacer algo como Excel.FindCellsWithAttribute ("editable_cell") para encontrar las celdas buscadas?VSTO: ¿Adjuntar metadatos a una celda en Excel?

Gracias! /Gustav

Respuesta

0

No recuerdo una manera de hacer exactamente lo que está preguntando. Lo que he visto hacer en el pasado fue establecer nombres de rango en función de lo que podría querer buscar. Otra opción es ocultar una celda al lado o alguna otra compensación predeterminada (por ejemplo, siempre 3 celdas a la derecha o la misma posición, pero en una página oculta). La celda/página oculta tendría los datos que estarías buscando.

Una cosa que parece haber surgido accidentalmente como una buena práctica en la empresa de contabilidad que solía trabajar es que debe insertar todos sus datos en una página "fea" que está oculta y usar fórmulas/búsquedas para referirse a tu información. De esta forma, puede actualizar la página "fea" y saber dónde están los datos mientras tiene una "página bonita" que los usuarios pueden simular hasta el contenido de sus corazones.

8

Hay varias manera de hacer esto. No conozco sus requisitos específicos, por lo que resumiré brevemente algunas soluciones.

  • Crear un rango con nombre, pero la adición/eliminación de datos puede afectar el rango con nombre definido si no lo hace bien. A veces, es mejor definir una sola celda llamada rango para que actúe como un marcador, y luego "seleccionar rango" obtendrá todos los datos.

  • Crear un estilo. Aplique este estilo a cada celda de datos que desea "buscar". Defina un método que devuelva una base de Rango en la que las celdas tienen el estilo especificado.

  • Crear un objeto PivotCache. Este objeto tiene la capacidad de actualizarse y reduce el tamaño del archivo, especialmente si la memoria caché se usa repetidamente en un libro de trabajo. También es una forma de evitar la limitación en el número de filas en una hoja de cálculo.

  • Crear una lista. Esto tiene muchas ventajas. Puede agregar/eliminar datos a voluntad. Agregar/eliminar columnas Piense en una lista como una tabla.

  • Utilice XML Mapping (http://msdn.microsoft.com/en-us/library/aa203737(office.11).aspx) como se menciona "code4life".

  • Si el libro de trabajo es XMLSS, defina un nuevo espacio de nombres y adornar las celdas con un atributo del espacio de nombres. Luego puede "consultar" usando XPath. Esto es muy poderoso porque puede insertar lo que sea necesario en un libro de trabajo.

Cada uno tiene sus ventajas/desventajas. He usado cada solución varias veces.

2

AMissico enumeró algunas muy buenas soluciones.Me gustaría añadir que funcionó para mí:

En C# (ExcelDNA/VSTO) o VBA puede hacer algo como:

var app = (Application) ExcelDnaUtil.Application; 
app.ActiveCell.AddComment("This is an editable cell"); 

La desventaja obvia sería que el usuario puede ver este comentario - en mi caso funcionó muy bien porque pude proporcionar diagnósticos útiles para el usuario, y también analizar el mismo texto para obtener los metadatos que quería.

También puede ocultar el comentario usando:

app.DisplayCommentIndicator = XlCommentDisplayMode.xlNoIndicator; 

Sin embargo, tenga en cuenta que esto oculta todos los comentarios, no sólo el que haya agregado. Para iterar sobre los comentarios en una hoja, puede utilizar lo siguiente:

var comments = ((Worksheet)app.ActiveSheet).Comments; 
foreach(Comment comment in comments) 
{ 
    var text = comment.Text(); 
    // do something... 
} 
+1

Los metadatos almacenados en los comentarios son demasiado fácilmente anulados por un usuario para ser útiles y pueden llevar a que el documento sea "desconectado" – MickyD

0

Puede incrustar los metadatos a nivel de libro dentro de un CustomXMLPart. La parte personalizada XML podría almacenar un diccionario serializado. El diccionario podría almacenar direcciones de celda como claves, y los metadatos correspondientes como el valor.

Adición de un elemento XML personalizado: http://msdn.microsoft.com/en-us/library/bb608612.aspx

Tenga en cuenta que esto sólo funciona para xls y xlsx formatos de archivo.

Cuestiones relacionadas