Tag: .net

如何更快地读取OpenXML格式

当我使用OLEDB时,从Excel工作表中读取3200行只需要2 – 3秒。 现在我改成了OpenXML格式,现在需要1分多钟才能读取Excel工作表中的3200行。 以下是我的代码: public static DataTable ReadExcelFileDOM(string filename) { DataTable table; using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(filename, true)) { WorkbookPart workbookPart = myDoc.WorkbookPart; Sheet worksheet = workbookPart.Workbook.Descendants<Sheet>().First(); WorksheetPart worksheetPart = (WorksheetPart)(workbookPart.GetPartById(worksheet.Id)); SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First(); List<List<string>> totalRows = new List<List<string>>(); int maxCol = 0; foreach (Row r in sheetData.Elements<Row>()) { // Add the empty […]

如何让C#连接到Excel的API

是否有可能连接到VBA中使用的相同的Excel库,而是使用C#来使用所有.Net框架function? 我想重新创build一些C#中的自动化VBA应用程序在不久的将来在.Net框架的一些点扩大他们的能力,并提高他们的速度,但我不知道如何做到这一点。

从Excel中读取数据

我一直在尝试从Excel文件中读取数据。 它已经成功了,但我遇到了一个问题。 每当单元格的格式和数据input的数据不匹配时,我得到空的数据 例如 如果数据单元被格式化为Date – dd/mm/yyyy ,并且用户input13/17/2011 ,则input的date格式和date是矛盾的,所以excel给了我完全空的单元格。 只有单元格格式是文本,我才能得到input的数据。 为什么在input的date格式不符合单元格格式设置的情况下,excel文件给了我空单元格? 这是读取Excel数据的代码 if(fileEXT.Equals(".xls")) { oledbConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("../Portal_Docs/UploadDocs/"+filename+"")+";Extended Properties=Excel 8.0"); } else if(fileEXT.Equals(".xlsx")) { oledbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+Server.MapPath("../Portal_Docs/UploadDocs/"+filename+"")+";Extended Properties=\"Excel 12.0;HDR=YES;\""); } else if(fileEXT.Equals(".xlsm")) { oledbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+Server.MapPath("../Portal_Docs/UploadDocs/"+filename+"")+";Extended Properties=Excel 12.0 Macro"); } oledbConn.Open(); OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", oledbConn); […]

Excel自动化,如何检测用户是否在Excel工作表中运行macros或单击“运行macros”CommandBarControl?

.net自动化库中是否有一些事件可以检测到正在使用excel文件的用户运行macros? 例如,用户打开一个包含macros的excel文档,比他运行macros和.net应用程序,附加到该excel进程检测到macros的开始事件? 或者可能将macrosfunction绑定到应用程序中的委托事件。 编辑: 可以从后面的代码中捕获“运行macros”CommandBarControl点击事件?

.NET VSTO – Excelfunction区选项卡标签为空,但仅限于Excel的第一个实例

所以我是一个适度的VSTO开发者,但是我的一个插件有一个新的问题。 加载项安装并运行得很好,但是无论什么原因,当打开Excel的第一个实例时(例如,当前没有其他工作簿打开),加载项的function区选项卡标签为空(见下文)。 要清楚,这个问题只出现在Excel的第一个实例上。 如果使用Ctrl+N或“ File–>New打开另一个工作簿,则新工作簿上的标签显示正常(尽pipe第一个工作簿仍将显示空白标签)。 此外,在任何人询问之前,function区选项卡types设置为自定义 ,而不是Office 。 更糟糕的是,我不能在计算机上重现问题,只能在客户的计算机上重现问题。 有没有人见过或听说过这个问题? 如果是这样,一个链接将有助于巨大的。 UPDATE 所以我解决了这个问题,但我仍然不是100%确定如何。 在色带的加载事件中有一个错误,我处理不好,并以某种方式使标签短路。 我对这个错误的处理做了一些改变(并修复了错误),现在标签正确显示了。 另一个更新 问题已经返回。 有任何想法吗? 我会添加一个奖励鼓励。

如何在Excel中创build基于模板的用户可定制报告

Excel如何用于生成最终用户可定制报告。 数据需要根据某些查询从oracle / SQL server数据库中提取,需要在Excel中生成报表。 我想根据自己的变化需求,为报表生成devise一个解决scheme,让他能够根据自己的变化要求为报表生成一个解决scheme,以便今天在报表需求方面不受开发团队的影响。 我之前使用C#&Crystal报表devise了这种types的应用程序,这需要三件事情:1.具有数据库查询的Crystal报表模板2.过滤条件(数据将从数据库读取数据)。 3.dynamic用户控制(如文本框,下拉等)生成组件按照过滤标准控制要求(由最终用户在数据库表中定义)。 如果最终用户熟悉水晶报表devise,那么他可以devise自己的水晶报表模板以及embedded在水晶报表中的数据库查询。 我的软件按照该报告模板的数据库中的定义生成dynamic用户控件。 这些过滤条件将传递给Crystal报表中定义的查询,以便根据其过滤条件生成所需的报表。 这帮助他今天在餐饮部门报告相关变化的要求。 现在我想用Exceldevise类似的解决scheme,即用Excel模板replaceCrystal报表模板。 我最初的build议是这样的,我将用excel模板replace水晶报表,具有固定参数和几个可变的报表参数(这将来自数据库根据查询),rest我将使用从我以前的解决scheme。 我不知道 如何在Excel中定义报告参数? 如何生成多页面报告(当数据库返回多个logging的数据集)? 如何在多页面上显示结果时如何将水晶报表进行分页? 如何在Excel中定义报表页眉和页脚区域以在多个页面上显示报表? 我知道这些东西可以使用macros编程(在Excel报表模板中定义)来完成,但对于最终用户来说这并不容易,我想要一个简单的通用解决scheme,我可以在我的c#程序中实现一次,以便最终用户(具有一点excel知识)可以根据自己的需要devise/修改报告,没有编程的麻烦,就像我以前的解决scheme(c#&Crystal报告)一样。 提前感谢您节省宝贵的时间,支持和指导。 问候。 Gopal Parikh。

为什么我的Excel的DDE调用是在使用线程池获得.NET应用程序的渲染层之后挂起的?

我发现了一个非常奇怪的问题,如果我使用ThreadPool获得.NET应用程序的渲染层,它将挂起一个非常简单的DDE调用。 在与Excel的DDE调用同时运行复杂的WPF应用程序时,发现问题。 我已经设法重现了几行代码,可以在下面find的问题。 C#.Net App //Need to reference PresentationCore.dll class Program { private static int _renderTier; static void Main(string[] args) { ThreadPool.QueueUserWorkItem(x => { _renderTier = RenderCapability.Tier; Console.WriteLine(_renderTier); }); Console.ReadLine(); } } Excel DDEmacros。 Sub Using_DDE1() ' Dimension the variables. Dim Chan As Integer Dim RequestItems As Variant ' Start a channel to Word using […]

C#Excel依赖select与validation和间接

下面是从C#中dynamic创build依赖选项列表的一般性尝试。 当从pick1中select值“A”时,pick2应该显示来自SecondaryRangeA的值。 这个代码几乎可以工作,但不是显示SecondaryRangeA,而是显示文字值“A”。 pick2.Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, XlFormatConditionOperator.xlBetween, "=INDIRECT(\"A5\")"); 当我打开excel后,它出口并修改数据validation它显示公式。 =INDIRECT("A5") 如果我在Excel中手动修改公式以排除引号,它按预期工作。 =INDIRECT(A5) 当我修改代码到以下我得到一个exception。 有任何想法吗? pick2.Validation.Add(XlDVType.xlValidateList, XlDVAlertStyle.xlValidAlertStop, XlFormatConditionOperator.xlBetween, "=INDIRECT(A5)"); 例外: System.Runtime.InteropServices.COMException was unhandled ErrorCode=-2146827284 Message=Exception from HRESULT: 0x800A03EC Source="" StackTrace: at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData) at Microsoft.Office.Interop.Excel.Validation.Add(XlDVType Type, Object AlertStyle, Object Operator, Object Formula1, Object Formula2) at TestExcelValidation.Program.Main(String[] args) in C:\TFS\ExcelInterop\TestExcelValidation\Program.cs:line […]

如何在Windows窗体上显示office和/或pdf内容?

我们有一个应用程序,pipe理员可以为他们的下属添加内容来查看。 他们的要求是它应该能够以不可编辑的方式显示Word,Excel,PowerPoint和PDF文档。 我发现这样做的一个select是将内容加载到Web浏览器组件中。 缺点是它会提示用户打开/保存/取消。 我们担心的是,大部分是电脑文盲的下属,在这样的文档上打开文档都会遇到麻烦。 使用上述方法还意味着需要在将运行该应用程序的所有机器上安装Microsoft Office和Adobe Acrobat(或另一个启用了IE的PDF阅读器),这意味着昂贵的许可费用。 有没有更好的方式让这个内容显示在我的表单在C#中?

如何读取C#中的Excel文件,而不会丢失任何列?

我已经使用OleDb连接成功读取excel文件已经有一段时间了,但是我遇到了一个问题。 我有一个人试图在第一列中没有任何内容的情况下上传Excel电子表格,当我尝试读取文件时,它不能识别该列。 我目前使用下面的OleDb连接string: 提供商= Microsoft.Jet.OLEDB.4.0; 数据源= c:\ test.xls; Extended Properties =“Excel 8.0; IMEX = 1;” 所以,如果excel文件中有13列,我回来的OleDbDataReader只有12列/字段。 任何有识之士将不胜感激。