Comment faire pour coller les données au format CSV, de presse-papiers de Windows avec C#
Ce que je suis en train d'accomplir
- Mon application génère des données tabulaires
- Je veux que l'utilisateur soit en mesure de lancer Excel et cliquez sur "coller" pour placer les données comme les cellules dans Excel
- Windows accepte un format appelé "CommaSeparatedValue" qui est utilisé avec l'Api si cela semble possible
- Mise en texte brut dans le presse-papiers œuvres, mais en essayant d'utiliser ce format n'
- NOTE: je peux correctement récupérer des données au format CSV dans le presse-papiers, mon problème est de coller les données CSV dans le presse-papiers.
Ce que j'ai essayé ça ne fonctionne pas
Presse-papiers.SetText()
System.Windows.Forms.Clipboard.SetText(
"1,2,3,4\n5,6,7,8",
System.Windows.Forms.TextDataFormat.CommaSeparatedValue
);
Presse-papiers.SetData()
System.Windows.Forms.Clipboard.SetData(
System.Windows.Forms.DataFormats.CommaSeparatedValue,
"1,2,3,4\n5,6,7,8",
);
Dans les deux cas, quelque chose est placé dans le presse-papiers, mais lorsqu'il est collé dans Excel, il apparaît comme une cellule de garbarge texte: "–§žý;pC¦yVk2ˆû"
Mise à jour 1: solution de Contournement avec SetText()
Comme alibres bd'agir expositions de la réponse de SetText avec TextDataFormat sert comme une solution de contournement
System.Windows.Forms.Clipboard.SetText(
"1\t2\t3\t4\n5\t6\t7\t8",
System.Windows.Forms.TextDataFormat.Text
);
J'ai essayé et confirmer que maintenant le collage dans Excel et Word fonctionne correctement. Dans chaque cas, il colle comme un tableau avec des cellules au lieu de clair.
Toujours curieux de savoir pourquoi CommaSeparatedValue est pas de travail.
Vous devez vous connecter pour publier un commentaire.
L' .NET Framework lieux
DataFormats.CommaSeparatedValue
sur le presse-papiers en tant que texte Unicode. Mais comme mentionné au http://www.syncfusion.com/faq/windowsforms/faq_c98c.aspx#q899q, Excel attend des données au format CSV pour être en UTF-8 flux de mémoire (il est difficile de dire si les .NET ou Excel est responsable de l'incompatibilité).La solution que j'ai trouvé dans ma propre application consiste à placer les deux versions des tableaux de données dans le presse-papiers simultanément en tant que texte délimité par des tabulations et CSV flux de mémoire. Cela permet à l'application de destination pour acquérir les données dans leur format préféré. Le bloc-notes et Excel préfèrent le texte délimité par des tabulations, mais vous pouvez forcer Excel à saisir les données au format CSV via le collage Spécial... commande des fins de test.
Voici un exemple de code (notez que WinForms équivalents de trésorerie à partir de la WPF espaces de noms sont utilisés ici):
Utilisez les onglets au lieu de virgules. c'est à dire:
Viens de tester moi-même, et il a travaillé pour moi.
J'ai eu du succès coller dans Excel à l'aide de \t (voir alibres bd'agir de la réponse) que les séparateurs de colonnes et \n comme séparateurs de lignes.