2

提前感谢您的帮助:)

上下文 我在我的 Windows 应用程序中使用 SpreadsheetGear,在某些情况下,用户希望从打开的 Excel 应用程序中复制数据并将二维网格粘贴到我的应用程序中的 SpreadsheetGear 对象中。

动机 我试图从剪贴板中的数据中获取信息,以准备粘贴。需要在粘贴之前确定传入数据的行数和列数,以便页面上的 SpreadsheetGear 控件和其他控件为数据“准备好”。

问题 1 如何从剪贴板中获取此类数据?我正在使用

System.Windows.Forms.Clipboard.GetData(...)

但我不确定是否应该将 DataFormat 指示为 CommaSeparatedValue (CSV) 或 Text。一种方法或另一种方法效果最好吗?是否有另一种我忽略的 DataFormat 可以帮助我?

问题2 我在Visual Studio 2012的即时窗口中使用了这个语句:

System.Diagnostics.Debug.WriteLine(Clipboard.GetText())

有趣的是,这返回了我在 Excel 中选择和复制的部分数据。剪贴板可以从 Excel 处理的数据量是否有限制?或者有没有办法让我的 Windows 应用程序帮助在剪贴板上分配更多空间,知道用户正在从 Excel 中选择数据并将该数据复制到剪贴板?

请让我知道我是否可以提供更多说明。我有点迷茫,不确定这个问题的范围。谢谢!

4

1 回答 1

2

这最终为我工作:

try
{
    var data = Clipboard.GetDataObject();
    var stream = (System.IO.Stream)data.GetData(DataFormats.CommaSeparatedValue);
    var enc = new System.Text.UTF8Encoding();
    var reader = new System.IO.StreamReader(stream, enc);
    string data_csv = reader.ReadToEnd();
    string[] data_csv_array = data_csv.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
    ...
}
catch (Exception e)
{
    ErrorHandling.ShowError("There is no data on the Clipboard to paste.");=
}

“...”表示一旦我以数组形式获得数据,我就会对数据做一些非常特别的事情。我想做的是展示我的解决方案中可以帮助有类似需求的人的部分。

于 2012-12-06T17:46:18.007 回答