【发布时间】:2011-05-23 03:18:17
【问题描述】:
我正在使用
读取来自 excel 的剪贴板数据var stream = (System.IO.Stream) ( Forms.Clipboard.GetDataObject() ).GetData( Forms.DataFormats.CommaSeparatedValue );,
但不幸的是,excel 传递的是单元格文本而不是单元格值。当单元格使用特殊格式(例如千位分隔符)时,列中一系列单元格的剪贴板数据如下所示:
1,234,123.00 2,345.00 342.00 12,345.00
存储如下:
\" 1,234,123.00 \",\" 2,345.00 \", 342.00 ,\" 12,345.00 \"
当我真正想要的是这样的时候:
1234123.00, 2345.00, 342.00, 12345.00
我之前一直使用clipData.Split(new string[] { "," }, StringSllitOptions.None)) 函数将我的 CSV 剪贴板数据转换为一系列单元格,但是当存在包含逗号的转义格式文本时,此方法会失败。
我在问是否有人能想出一种方法将此字符串拆分为一组单元格,而忽略在 \" 位内转义的逗号,因为这就是 Excel 选择转义包含逗号的单元格的方式。
简而言之,我怎样才能打开一个包含这个的字符串:
\" 1,234,123.00 \",\" 2,345.00 \", 342.00 ,\" 12,345.00 \"
放入包含以下内容的字符串数组中:
{ "1,234,123.00", "2,345.00", "342.00", "12,345.00" }
不会破坏我解析简单逗号分隔字符串的能力。
*****编辑***
在此处跟进问题(以 DFA 形式表述):Split a string based on each time a Deterministic Finite Automata reaches a final state?
【问题讨论】:
-
您是否真的看到了一个 \ 后跟一个 " 或者您只是使用 \" 来表示双引号而不是字符串开头的表示。
-
不能获取其他格式的数据吗?使用 IDataObject.GetFormats 检索可用格式列表,看看是否能找到更好的格式。
-
好的,我将花时间评估和测试其中几个解决方案,然后回复你们。
-
许多解决方案都失败了,因为 Excel 并不总是在单元格值周围加上引号,只有当它们包含逗号时。任何使用 "split" 的情况下,如果不使用引号,会避免在引号内意外拆分逗号,则无法正确拆分逗号。