Tag: wpf

如何把数组放入excel范围

我知道如何将单个单元格写入Excel中,但是当我试图在Excel数组表格填充只有最后一个值 这是我的范围 Excel.Range ServiceName = (Excel.Range)_sheet.get_Range(_sheet.Cells[38, "B"] as Excel.Range, _sheet.Cells[45, "B"] as Excel.Range); _ServiceName是包含1,2,3,4,5,6的列表 for (int i = 0; i < _ServiceName.Count; i++) { ServiceNameArray[0, i] = _ServiceName[i]; } 这个我想写入excel,但正如我所说的,只有最后一个项目(6)在Excel的书 for (int i = 0; i < _ServiceName.Count; i++) { ServiceName.set_Value(Type.Missing, ServiceNameArray[0,i]); } 有没有人有一个想法?

全局键盘挂钩(Excel)自动插件(不是VSTO)

道歉的这篇文章的长度,但我认为背景是必要的,以传达我想要实现的。 我负责更新一个旧的Excel UDF插件(它以前使用Steve Dalton的书中的JNI代码,几乎可以想象得到其他技术)。 这些函数对Excel的计算模型非常不感兴趣 – 这些函数需要几个范围,并在允许用户编辑这些数据(然后保存并上传到远程服务器)的同时(在另一个线程中)写回数据。 所有这些使得加载速度非常缓慢,但是给用户提供了必要的灵活性来根据需要改变数据。 我已经将它迁移到C#(它通过WSDL从远程Java服务器获取数据),但是我发现大多数函数被调用了50次以上,并且运行速度远远低于原始插件(这是一个使用自动插件Extensibility.IDTExtensibility2 – 所以没有VSTO技巧可用)。 在绝望的情况下,我决定尝试将UDF的块重写为数组函数,而不是接受input(Excel会抱怨覆盖数组) – 显然这比现在的用户快了几个数量级,但是缺less关键要求能够修改输出数据。 实现Excel没有提供任何之前编辑是提交validationcallback事件(我玩过Worksheet.OnEntry并添加了一个VBComponent,但它没有被触发之前有关覆盖数组或列表数据validation的错误)。 我认为这将是足够简单的实现一个全局的键盘钩子,所以开始编写一些Windows窗体来拦截编辑(只是一个文本框单个表单条目和一个combobox单元格与列表数据validation),也得到它从剪贴板复制数据所选范围。 目前,所有这一切都是由定制的上下文菜单项(或双击)驱动的,这将不会被用户所接受 – 我必须至less能够拦截F2,Ctl + V并直接在活动单元格上打字。 但我不知道如何在自动插件中注册全局键盘钩子。 所以我的问题是, 是否有可能拦截每一个编辑尝试,并提供我自己的处理? 或者失败了,我如何注册一个全局的键盘钩子来拦截F2,Ctl + V并直接在活动单元格上打字? 我试过在这里find的钩子在WPF / C#中使用全局键盘钩子(WH_KEYBOARD_LL),但无法获得App.xaml + App.xaml.cs在这种情况下工作(这是我第一次遇到C#和Windows编程一般) ,所以可能有人需要启发我的App.xaml + App.xaml.csconfiguration()。 请注意; 这不是一个VSTO插件,它使用Extensibility.IDTExtensibility2实现。 更新编辑: @TimWilliams和@CharlesWilliams询问为什么我以前的版本 ,它读写它的函数的参数,有这么多重复的调用。 所有的function都有一个强制性的ID键参数,大部分也取一个date或date范围,下面是发生了什么(在相当大的工作簿〜30张图): 当第一次加载工作簿时,函数会调用所有的过期值(先前保存的)值,但是这些值都被忽略,因为每个函数中的C#的第一行是对备份模型的(快速)testing,以查看模型是否已经加载,没有函数参数被检查/解组。 用户select通过web服务或以前的序列化文件加载模型。 可视化更新被禁用,并且设置表按照顺序填充一些数据; 一些关键的date(date的开始和结束 – 不同的date范围在不同的纸张上用EMONTH +/- 12计算),一些其他的静态数据(作者/编辑者名字等等),最后是强制性的键ID(标识模型数据) 现在,自动化插件中的每个函数的方法都有id键,所以如果find数据,它将返回,否则将使用来自函数参数的默认值。 (注意:模型维护函数所请求的对象字段的副本,以便知道输出的内容。对于进一步的调用,如果数据存在于caching层中,它将被更新(原始模型数据或先前caching值)与传入的函数参数 – 高速caching层和模型数据的差异后来上传到web服务) – 没有很好地解释“caching”实际上是一个包装模型数据相同的数据结构 […]

关注Excel VSTO WPF应用程序

我在一个Excel VSTO外接程序中托pipeWPF应用程序,并且它可以正常工作,但是在最小化WPF对话框之后,似乎无法使用代码再次激活(焦点)。 试过: this.Show(); this.Activate(); this.BringIntoView(); this.Focus(); 但是他们都没有工作。

为什么我的GUI不能更新?

我正在创build一个程序,通过成千上万的Excel单元格,并分割string和表单,并根据这些数据填充图表。 我遇到的问题是与GUI。 我把程序分成两个独立的类。 一个处理Excel数据,另一个是WPF窗体的MainWindow类。 问题在于MainWindow没有随着信息的更新而更新。 它应该更新一个对话框和一个进度条,通过这些步骤进行显示。 它没有做任何事情,但终于出现在最后完全充满,就好像它一直在这样做。 最初是build议我把职责分成多个线程,我已经这样做了,但似乎并不奏效。 这是我处理线程的方式吗? 我可以根据要求发布尽可能多的代码,但是这是很多的,所以如果它是简单的,我不想把它全部转储。 Private Sub runButton_Click(sender As Object, e As RoutedEventArgs) Handles runButton.Click If FillCheck() = True Then program = New ExcelClass(dataText.Content.ToString, saveText.Content.ToString) Dim excelThread As New System.Threading.Thread(AddressOf program.beginProgram) excelThread.Start() checkUpdate() ElseIf FillCheck() = False Then MsgBox("You must select both the file to get the data from and […]

访问WPF中的dataGrid中的特定行/列

最近我刚开始学习WPF。 虽然我的开发经验大部分来自Win Forms,但我已经相当顺利地转换到了WPF。 OVERVIEW 我正在编写一个程序,比较两个单独的数据表中的信息,并反映在dataGrid中所做的更改。 dataTables表示“旧信息”和“新信息”的列表。 在比较数据表之后,我希望根据是否在“新信息表”中做出改变来突出显示特定的单元格。 例如,如果dataGrid([0] [0])中的第一个单元格包含“Old Information”dataTable中的“3”,并且“New Information”dataTable中包含相同的单元格([0] [0])包含“5”。 我想改变背景颜色来说,黄色,以反映这种变化。 PROBLEM 我目前正在使用两个dataGrid对象,这些对象正在填充,并表示两个dataTable(“旧信息”和“新信息”)。 我遇到的问题是,我似乎无法很好地访问特定的行或列。 我想能够访问一个特定的行/单元格,所以我可以通过代码更改背景颜色。 Comments 我记得当我使用Win Forms时,你可以沿着dataGrid1.Rows [rowNumber] .Columns [ColumnNumber]的行来做一些事情来访问特定的行/列。 从我迄今为止读到的有关WPF dataGrids的内容来看,他们更基于对象或类似的东西,使访问特定行/列的过程有点不同/乏味。 如果您碰巧知道如何访问WPF中的dataGrid中的行/单元格内容,请让我知道。 任何简单的例子将不胜感激。

以string数组的forms从应用程序中的Excel文件中获取数据

我想要做的是从Excel复制一列,粘贴数据到应用程序,然后形成一个数组的数据。 我不知道如何做到这一点我试过这个: var x = Clipboard.GetDataObject(); 但是看起来x等于null。 那么,这是可能的还是有其他的方法来做到这一点? 并感谢您的帮助,

wpf – 与办公室汇编的参考错误

所以我一直在试图导出我的wpf网格到一个Excel工作表。 但是当我倾向于导入Microsoft.Office.Interop.Excel程序集时,出现以下错误: public partial class SKT : Page; 它说: “页面”是“Controls.Page”和“Excel.Page”之间的模糊引用 有人可以帮我解决这个问题,我该怎么做? PS 请添加一些代码作为例子 非常感谢!

迭代通过datagrid行导出到Excel(再次)

我正在尝试将dataGrid行导出到Excel工作表。 因为我从一个WinForms(dataGridView)切换到WPF(dataGrid),基本上我不知道WPF到目前为止,我需要你的帮助。 也许有人可以告诉我如何改变我的循环或我必须做的,而不是让行填充到Excel工作表的单元格。 我已阅读所有关于这个问题的文章,但似乎没有find适合我的问题的话题。 这是我填写列名所做的,完美的作品: for (int i = 1; i < dataGrid.Columns.Count + 1; i++) { Excel.Range BackgroundColor; BackgroundColor = xlWorkSheet.get_Range("a9", "j9"); BackgroundColor.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.RoyalBlue); AxlEx.Cells[9, i] = dataGrid.Columns[i – 1].Header; } 当它涉及到填充行的单元格时,我尝试了很多尝试,以使其工作 for (int i = 0; i < dataGrid.Items.Count; i++) { DataRowView aux = (DataRowView)dataGrid.Items[i]; for (int j = 0; j < […]

如何在excel中表示一个属性值

我的代码工作正常,生成一个Excel文件,在这里感谢这个社区。 但是我仍然有一个问题: 我有一个ListBox从中我将数据导出到Excel文件。 当我运行它,文件将被创build,我打开它,并在行中,我看到“SheduleMenager.Employees” 员工是我的项目中的类,我有两个属性: string Name和bool Experience 这是一个创build和填充excel文件的button: private void Generateexcelfile_Click(object sender, RoutedEventArgs e) { Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); for (int i = 0; i < MonBox.Items.Count; i++) { xlWorkSheet.Cells[i + 1, 1] = MonBox.Items[i].ToString(); } xlWorkBook.SaveAs("FILEPATH", Excel.XlFileFormat.xlWorkbookNormal, misValue, […]

如何使用C#和WPF导入和导出excel?

我有一个由机器生成的Excel文件。 我需要使用WPF和C#创build一个应用程序,它可以导入Excel的内容,做一些计算,并创build一些新的列,并保存为新的Excel文件。 哪一条路要走?