tengo los datos en una hoja de cálculo de Excel con los valores de la siguiente manera:pegar de Excel en C# aplicación, conservando la precisión completa
- 0,69491375
- 0,31220394
Las células tienen el formato de porcentaje, y configurado para mostrar dos lugares decimales. Por lo que aparecerá en Excel como:
- 69,49%
- 31,22%
Tengo un programa de C# que analiza estos datos de la Clipboard
.
var dataObj = Clipboard.GetDataObject();
var format = DataFormats.CommaSeparatedValue;
if (dataObj != null && dataObj.GetDataPresent(format))
{
var csvData = dataObj.GetData(format);
// do something
}
El problema es que csvData
contiene los valores de indicación de Excel, es decir '69 0,49% 'y '31 0,22%'. No contiene la precisión completa de los lugares decimales adicionales.
He intentado usar los diversos valores diferentes DataFormats
, pero los datos solamente siempre contiene el valor de la pantalla de Excel, por ejemplo:
DataFormats.Dif
DataFormats.Rtf
DataFormats.UnicodeText
- etc.
Como prueba, instalé LibreOffice C alc y copie/pegue las mismas celdas de Excel en Calc. Calc conserva la precisión total de los datos brutos.
Así que, claramente, Excel pone esta información en algún lugar al que otros programas pueden acceder. ¿Cómo puedo acceder desde mi aplicación C#?
Editar - Próximos pasos.
he descargado el código fuente de LibreOffice Calc y tendrá un empuje alrededor para ver si puedo averiguar cómo consiguen el contexto completo de los datos copiados de Excel.
También hice una llamada GetFormats()
en el objeto de datos devuelto desde el portapapeles y obtuve una lista de 24 formatos de datos diferentes, algunos de los cuales no están en la enumeración DataFormats
. Estos incluyen formatos como Biff12
, Biff8
, Biff5
, Format129
entre otros formatos que no son familiares para mí, así que voy a investigar estas y responder si hago ningún descubrimiento ...
Acabo de intentar pegar los datos en como 10 programas diferentes, y todos me han dado los datos formateados "69.00% \ r \ n" tal como lo veo Clipboard.GetData –
Sí, tienes razón. Estaba pensando, ¿tiene Excel su propio portapapeles interno donde almacena todos los datos de formato y precisión, que no se colocan en el portapapeles general? ¿Tiene Calc algún gancho en el portapapeles interno de Excel, que la mayoría de las aplicaciones no tendrían y no es fácil de obtener? Temo la respuesta a esto. :-) – Lyall
si Calc usa un gancho excel, no veo una razón por la que no pueda usar ese mismo gancho ... – Adam