Tag: vsto

如何实现高性能Excel VSTO到SQL Server?

我正在开发Excel 2010 VSTO解决scheme(在Visual Studio 2010中为Excel工作簿进行代码隐藏),并且需要与集中的SQL Server 2008 R2数据源进行交互以进行读取和写入操作。 数据库将在主表中包含多达15,000行以及相关的行。 理想情况下,电子表格将从数据库中填充,asynchronous使用,然后上载以更新数据库。 我关心的是数据量方面的performance。 电子表格将通过Web门户提供下载。 到目前为止我已经考虑过两个解 作为数据访问层的WCF服务,工作簿在线查询以使用整个必需的数据集填充其表。 一旦更新从工作簿本身触发,更改将被发布到WCF服务。 从Web门户下载隐藏工作表时,将工作簿的数据预加载到自己的数据中。 通过Web门户上传修改后的工作簿可以保存更改。 在我们的核心function运行之前,我并没有对优化进行太多的调整,但是我不想把自己放在任何一个不错的select上。 我想避免一个场景,我们必须有select地处理一小部分数据,以避免放慢速度 – >将这种行为整合到电子表格中听起来像是不必要的复杂性。 也许有人在这方面有更多的经验可以推荐一种不会在我们脚下射击的方法?

C#Excel VSTO – 取消select所有单元格

因此,当您打开一个Excel工作簿时,每张工作表会保存上一次使用工作表时所做的最后一个单元格select。 在C#中,我想取消select(去焦点,无论…)在每个工作表中的所有单元格。

如何find一个单元格的命名范围 – VSTO抛出exception

要获得一个单元格的命名范围,请查看我的代码。 如果单击的单元格位于第一张纸上,则可以正常工作。 但是当我从其他工作表中select一个单元格时,它只是从HRESULT:0x800A03EC错误中引发exception 在堆栈上看到类似的问题,但力量从这些post得出的结论:这是我的代码: Microsoft.Office.Interop.Excel.Workbook _workbook = ThisAddIn.Application.ActiveWorkbook; Microsoft.Office.Interop.Excel.Range Target = (Microsoft.Office.Interop.Excel.Range)Globals.ThisAddIn.Application.ActiveCell; foreach (Microsoft.Office.Interop.Excel.Name name in _workbook.Names) { Microsoft.Office.Interop.Excel.Range intersectRange = _workbook.Application.Intersect(Target, name.RefersToRange); if (intersectRange != null) { rangeName = name.Name; break; } }

我怎样才能得到一个范围结合X行和Y行在Excel中与VSTO&C#的起点?

我有一个Excel工作簿,它有一些基于VSTO的C#代码。 鉴于已知的一点: var start = START.get_Address(); // "$A$10" 我想创build一个以$A$10开始的范围,但包含一个额外的X行和Y列。 例如 var x = 10; var y = 5; 我想要一个代表$A$10:$F$20 。 我可以通过组合地址来实现: var end = ((Excel.Range) START.get_Offset(x, y)).get_Address(); var targetRangeAddress = start + ":" + end; var newRange = get_Range(targetRangeAddress, System.Type.Missing); 但是,必须有一个更简单的方法。 以上是非常丑陋的。

写入单元格会打开我的VSTO加载项中的ScreenUpdating

我有一个奇怪的问题,Excel在我的开发机器和testing机器上performance不一样。 在我的加载项中,我closures了ScreenUpdating在长时间运行的进程的几个地方。 在我的机器上,这工作正常。 在testing机器上,只要我写入单元格,Excel就设置ScreenUpdating = true 。 下面的代码演示了我的问题。 private void ThisAddIn_Startup(object sender, System.EventArgs e) { Microsoft.Office.Interop.Excel.Application excel = Globals.ThisAddIn.Application; MessageBox.Show(excel.ScreenUpdating.ToString()); excel.ScreenUpdating = false; MessageBox.Show(excel.ScreenUpdating.ToString()); Workbook workbook = Globals.ThisAddIn.Application.ActiveWorkbook; Worksheet w = (Worksheet)workbook.Worksheets[1]; ((Range)w.Cells[1, 1]).Value = "Test"; MessageBox.Show(excel.ScreenUpdating.ToString()); } 在我的机器上,打开Excel提供了三个消息框 “真”,“假”,“假”。 在testing机器上他们说 “真”,“假”和“真”。 我也用远程debugging器进行了检查,并在单元格值设置后立即观察ScreenUpdating属性的变化。 而且,这不是重置ScreenUpdating的唯一的东西。 添加或删除工作表或工作簿也会这样做。 每个系统上的Excel版本相同(14.0.6112.5000(32位))。 什么可能导致这个? 我怎样才能解决这个问题,让Excel尊重我的设置?

使用正确的列宽和格式从DataSet加载DataTable

我想知道如何调整列宽以适应数据的宽度,并将值设置为C#中的2个小数位,而从DataSet加载时使用Visual Studio Tools for Office。 下面是我用来填充DataTable的代码: public DataTable myData { get { if (_myDataSet.Tables.Contains("TableName")) { return _myDataSet.Tables["TableName"]; } else { return null; } } } 任何帮助将不胜感激! 谢谢!

打开时更新现有的Excel文件

我读了很多关于如何从C#到Excel的沟通,看到了一些很好的参考。 事情是我正在寻找一种简单的方法来更新现有的Excel文件,而它仍然是开放的,使用最先进的方式(例如linq)而不是OLEDB。 这应该是几行代码描述如何读取当前单元格,更新他的价值,并考虑到文件可能不存在,但如果它确实存在和打开,它只会更新文件,而不通知文件是已经存在。 如果该文件不存在,则会创build一个新文件。 SO:1.连接到一个excel文件,检查是否存在,如果没有创build一个 2.从单元格中读取 3.更新单元格 4.这样做,而excel表可以仍然开放野生。 我已经去过以下地方了: http://social.msdn.microsoft.com/Forums/vstudio/en-US/ef11a193-54f3-407b-9374-9f5770fd9fd7/writing-to-excel-using-c 以编程方式更新Excel文档 使用oledb更新excel文件的特定单元格 我使用了下面的代码: if (File.Exists(@"C:\\temp\\test.xls")) { Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbooks workBooks = excelApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook workBook = workBooks.Open(@"C:\\temp\\test.xls"); Microsoft.Office.Interop.Excel.Worksheet workSheet = workBook.Worksheets.get_Item(1); int nColumns = workSheet.UsedRange.Columns.Count; int nRows = workSheet.UsedRange.Rows.Count; for (int i = 2; i < nRows; i++) { workSheet.Columns["1","A"] = "test"; } […]

如何在使用VSTO的Excel中的自定义xmlfunction区中禁用其他工具栏

这是一个情况:我用一些button为Office(Word,Excel,PowerPoint)创build了我自己的function区。 function区是在C#,VSTO,XML(不是devise器)中创build的。 所有这些程序中都有一个新的function区,其中有一个function区组,我的button在哪里。 唯一的例外是Excel,第一个地方有一个“Custom Toolbar”组,第二个是我的组。 最好的部分是这个“Cutsom工具栏”不会出现在我安装我的加载项的每台计算机上。 我的问题:这个“自定义工具栏”如何显示在我创build的新function区上,有什么方法可以禁用它? function区代码: <?xml version="1.0" encoding="UTF-8"?> <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon_Load"> <ribbon startFromScratch="false"> <tabs> <tab idMso="TabAddIns" label="MyAddIn"> <group id="GroupInclude" label="MyAddIn"> <button id="saveMyAddIn" label="Save my file" getImage="imageButton" size="large" onAction="saveMyAddInButton" getEnabled="GetEnabled" /> <button id="configurMyAddIn" label="MyAddIn Options" getImage="imageButton" onAction="configureMyAddInButton" /> <button id="goToMyAddIn" label="Go to MyAddIn" getImage="imageButton" onAction="goToMyAddInButton" /> <button id="aboutMyAddIn" label="About MyAddIn" getImage="imageButton" onAction="aboutMyAddInButton" /> […]

将行添加到Excel表

我正在开发Excel 2013/2015 VSTO工作簿应用程序。 从Windows窗体中input的数据,我想在我的工作表之一的现有表中创build一个新的logging。 如何使用C#和VSTO将新的表格行插入Excel表格(不是简单的工作表数组)?

c#VSTO从硬盘运行VBA模块

我正在使用C#构build一个VSTO的Excel AddIn,我想要做的一件事就是自动将一个VBA模块写入(.bas文件)到Excel中,并在用户从Excel中的Com AddIns中导入我的Excel AddIn时运行它。 我尝试像: private void ThisAddIn_Startup(object sender, System.EventArgs e) { this.Application.Run(@"C:\myModule.bas"); } 但有错误: Cannot run the macro 'C:\myModule.bas'. The macro may not be available in this workbook or all macros may be disabled. Cannot run the macro 'C:\myModule.bas'. The macro may not be available in this workbook or all macros may be disabled. […]