2010-09-01 33 views
0

Dans une application WPF, j'ai besoin de générer des données qui peuvent être placées dans le presse-papiers et collées dans Excel. J'ai besoin de coller quelque chose qui peut transmettre des données et des formules.Avec C# est-il possible de mettre un objet dans le presse-papiers qui va coller dans Excel comme données et formules?

J'essayais OpenXML ... mais je ne suis pas sûr que cela fonctionne.

Je tente actuellement de faire « SpreadsheetML » brut (Ceci est différent de OpenXML?)

Quoi qu'il en soit, si quelqu'un pouvait me donner quelques conseils ... ou mieux encore, C# qui met effectivement ce genre de données sur le presse-papiers, je l'apprécierais grandement!

J'ai posté une autre question plus spécifique ici: How do I get OpenXML onto the clipboard so that it will paste into Excel?

Répondre

1

Je pense que la réponse est NONE. C'était certainement le cas. Essayez ce test simple, en utilisant la visionneuse de presse-papiers de Windows XP (clipbrd.exe) que vous pouvez récupérer dans n'importe quel système XP sous Vista/Windows7.

1) Copy from Excel. Just a few cells, as you don't want to crash anything. 
2) In clipbrd.exe, save as a file. Call it xl.clp It may take awhile, as it will force 1) 3) Excel to render all clipboard formats. 
4) Close Excel 
5) Press PrintScreen to wipe the clipboard. 
6) Open Excel again 
7) In clipbrd.exe, open xl.clp 
8) Paste into Excel. 
Did you get your forumulas back? I expect not 

.

Ahhhh attends, il y a plus! J'ai juste essayé ceci avec Excel 2009. Si je colle, j'obtiens la version en texte brut. Mais si je fais un collage spécial, et choisissez "XML Spreadsheet", cela fonctionne! Et il ajuste même les forumlas si vous collez dans une autre rangée. Sensationnel. C'est nouveau et soigné. Alors ... OUI vous pouvez, si vous utilisez ce format. Il semble que ce soit du texte brut contenant du XML avec près du haut. Vous devez enregistrer "XML Spreadsheet" en tant que format de données privé.

+0

Je connais déjà les travaux sortants (à partir d'Excel). C'est comme ça que j'ai découvert cela en premier lieu. Je ne peux tout simplement pas le récupérer dans Excel. Je vais essayer cela et vous le faire savoir. – Phobis

+0

Bien, mais Excel a environ 24 formats sortants, et en dehors de celui-ci, aucun n'est très utile entrant, sauf pour CSV mais qui n'a pas de formules. Mon test a prouvé que le format de feuille de calcul XML est utile en entrée. vous devriez être tous ensemble. –

+0

J'ai essayé ce que vous avez dit. Je cours Windows 7 donc j'ai dû utiliser d'autres programmes pour voir/sauvegarder le presse-papiers. J'ai été en mesure de remettre les données identiques dans le presse-papiers, mais je ne peux pas modifier les données et le faire fonctionner. Il doit y avoir des bits quelque part qui indiquent la taille des données ou quelque chose. De toute façon, j'ai besoin d'une solution plus définitive. Cela aide un peu, mais je ne peux toujours pas obtenir le presse-papiers pour accepter ce format par C# et je ne peux même pas changer les données en utilisant une application de presse-papiers et lui faire accepter le coller dans Excel. – Phobis

1

Cela ne peut pas être fait. Je l'ai récemment fait avec Microsoft (support & l'équipe de développement Office) et Office n'acceptera pas de format OpenXML à partir d'applications tierces. Pour Word, vous devez utiliser rtf et pour Excel/PPT, vous devez utiliser html.

Mais nous avons essayé de dupliquer ce que Word copie/colle sur lui-même et il ne le prendra pas à partir d'une application tierce, même si c'est le seul format offert. Et MS a confirmé ce comportement pour nous.

0

Phobis, essayez le prochain article: Link

Ensuite, vous pouvez utiliser ce code, regardez l'étiquette ss: Formula.

<Table ss:ExpandedColumnCount="4" ss:ExpandedRowCount="3" x:FullColumns="1" 
    x:FullRows="1" ss:DefaultColumnWidth="60" ss:DefaultRowHeight="15"> 
    <Row ss:Index="2"> 
    <Cell ss:Index="2"><Data ss:Type="String">A</Data></Cell> 
    <Cell><Data ss:Type="String">B</Data></Cell> 
    <Cell ss:Formula="=CONCATENATE(RC[-2],RC[-1])"><Data ss:Type="String">AB</Data></Cell> 
    </Row> 
    <Row> 
    <Cell ss:Index="2"><Data ss:Type="Number">1</Data></Cell> 
    <Cell><Data ss:Type="Number">2</Data></Cell> 
    <Cell ss:Formula="=SUM(RC[-2]:RC[-1])"><Data ss:Type="Number">3</Data></Cell> 
    </Row> 
    </Table> 

Cela fonctionne pour moi.