在C#中,我使用下面的代碼將數據從一個WPF DataGrid
複製到剪貼板,然後從剪貼板到CSV:在C#中,可以強制Clipboard.GetData輸出每個CSV值的引號嗎?
var originalSelectionMode = dataGrid.SelectionMode;
dataGrid.SelectionMode = DataGridSelectionMode.Extended;
dataGrid.SelectAllCells();
dataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null, dataGrid);
dataGrid.UnselectAllCells();
// this is the line that's not working quite right:
var text = (string)Clipboard.GetData(DataFormats.CommaSeparatedValue);
Clipboard.Clear();
dataGrid.SelectionMode = originalSelectionMode;
File.WriteAllText(fullPathToFile, text);
此代碼在大多數情況下,但有當問題您在其中一個單元格中有多行文本。比方說,你有這樣的網格數據:
A |B |C
-------------------
A1 |B1 |C1a,C2b
-------------------
A2 |B2 |C2a
| |C2b
-------------------
的Clipboard.GetData
功能似乎只插入周圍的情況下的單元格的內容,你必須在你的內容逗號或雙引號字符雙引號,但如果你在那裏有一個換行符,因此,與上述電網的輸出應該是這樣的沒有做,它會自動:
A,B,C
A1,B1,"C1a,C1b"
A2,B2,C2a
C2b
注意,它並把周圍小區C1引號,但不是細胞C2。
有沒有一種方法可以讓Clipboard.GetData
總是在每個單元格周圍加引號?如果不是,我該如何解決這個問題?
沒有,但沒有什麼可以從做阻止你,你得到的數據出來之後。此外,無論.NET代碼將數據放在哪裏,都會添加這些引號......它不是內置於「剪貼板」類中的內容。 – Sheridan
@Sheridan - 添加缺少的引號並不是一個小問題。 –
@Sheridan,引號通過[DataGridClipboardHelper.FormatPlainCell](http://referencesource.microsoft.com/PresentationFramework/R/68eaf75082b68e8f.html)方法放入CSV中。確實它不是* Clipboard *類的一部分,但它是WPF DataGrid實現(及其輔助類)的一部分。 – elgonzo