Tag: .net

将Excel快速导入DataTable

我正在尝试将Excel文件读入Data.DataTable列表中,尽pipe使用当前的方法可能需要很长时间。 我实际上按工作表逐个工作表,而且它往往需要很长时间。 有没有更快的方法来做到这一点? 这是我的代码: List<DataTable> List = new List<DataTable>(); // Counting sheets for (int count = 1; count < WB.Worksheets.Count; ++count) { // Create a new DataTable for every Worksheet DATA.DataTable DT = new DataTable(); WS = (EXCEL.Worksheet)WB.Worksheets.get_Item(count); textBox1.Text = count.ToString(); // Get range of the worksheet Range = WS.UsedRange; // Create new Column in […]

C#Excel Interop – 调用Worksheet.ExportAsFixedFormat时禁止“发布”对话框

我正在使用Excel Interop打开一个xlsx文件并将其保存为pdf文档。 在调用“ExportAsFixedFileFormat”方法后,会显示一个标题为“发布”的对话框来表示进度。 我怎样才能压制或隐藏这个对话框? 我在其他论坛上看到了一些类似的问题,但没有一个令人满意的解决scheme,但希望有人从那以后解决了这个问题。 码: Application application = new Application(); application.DisplayAlerts = false; // <- No effect application.Visible = false; // <- No effect application.ScreenUpdating = false; // <- No effect application.UserControl = false; // <- No effect application.Workbooks.Open(path, Type.Missing, true); application.DisplayDocumentActionTaskPane = false; // <- No effect application.Worksheets[1].ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, path);

DataRow:按给定的列名称select单元格值

我有一个DataRow的问题,我真的很苦恼。 数据行是使用OleDbConnection从Excel电子表格中读入的。 如果我尝试使用列名从DataRow中select数据,即使有数据,也会返回DBNull。 但事情并不那么简单。 datarow.Table.Columns[5].ColumnName返回“我的列”。 datarow["my column"]返回DBNull。 datarow[5]返回500。 datarow[datarow.Table.Columns[5].ColumnName]返回DBNull。 (只是为了确保它不是一个错字!) 我可以使用列号从数据行中select一些东西,但是我不喜欢这样做,因为如果列顺序发生变化,软件将会中断。

寻找只有32位的替代schemeMicrosoft公共控件(ListView)

我有一个使用ListView控件的VBA / Excel开发的遗留应用程序。 不幸的是,它看起来像这些控件不能用于64位版本的Excel : Office 2010中的本机64位进程无法加载32位二进制文​​件。 这包括MSComCtl的常见控件[如ListViews]。 当代码迁移到64位Office 2010时,必须find现有的Microsoft Office VBA解决scheme的替代scheme。 我需要将旧应用程序迁移到Excel 2010/13 x64。 除了那些ListView控件外,这个过程大多是无痛的。 我的主要select是什么来replaceListView控件,哪个是最有效的(从实现时间和难度的angular度来看)? 笔记: 这个问题已经在MS论坛上提出,但没有给出实际的答案。 添加.net标签,因为我怀疑有些解决scheme可能来自那里。 为了更清楚,这里是Excel用户表单的快照。 底部是列表视图(我有隐藏的机密信息),它具有可sorting的列,允许用户select多个不连续的行。

*每个* Excel互操作对象是否需要使用Marshal.ReleaseComObject发布?

编辑 请参阅如何正确清理Excel互操作对象? 。 最近我遇到了这个问题,它提供了很多关于如何正确处理COM对象的问题的见解。 肯定检查超出第一个(标记)的答案,因为其他答案超越了简单的“不要使用两个点”和“使用ReleaseComObject为每个COM对象”的build议。 我首先回顾了这个问题,因为我意识到尽pipe在注册和部署所有COM对象方面非常全面,但是我的Excel实例仍然没有得到妥善处理。 事实certificate,有一些方法可以创build完全不明显的COM对象(即,即使您从不使用两个点,也可能会错过COM对象)。 此外,即使你是彻底的,如果你的项目增长超过一定的规模,错过一个COM对象的机会接近100%。 当发生这种情况时,很难find你错过的那个。 上面提到的问题的答案提供了一些确保Excel实例被closures的其他技巧。 同时,我对ComObjectManager (下面)做了一个小的(但是很重要的)更新,以反映我从上面链接的问题中学到了什么。 原来的问题 我已经看到了几个例子,其中Marshal.ReleaseComObject()与Excel Interop对象(即,来自命名空间Microsoft.Office.Interop.Excel的对象)一起使用,但我已经看到它在不同程度上使用。 我想知道如果我能摆脱这样的事情: var application = new ApplicationClass(); try { // do work with application, workbooks, worksheets, cells, etc. } finally { Marashal.ReleaseComObject(application) } 或者,如果我需要释放每个创build的对象,如下所示: public void CreateExcelWorkbookWithSingleSheet() { var application = new ApplicationClass(); var workbook = application.Workbooks.Add(_missing); var worksheets = workbook.Worksheets; […]

将数据写入Excel时如何使正确的date格式

Iam使用Office Interop将DataTable导出到Excel文件。 问题是,Excel不能识别date,而是显示数字。 在另一种情况下,我传递一个string,然后将其识别为date。 在这两种情况下,数据都搞砸了。 我试过NumberFormat @这应该存储在文本格式的单元格,但它也没有工作。 Application app = new Application(); app.Visible = false; app.ScreenUpdating = false; app.DisplayAlerts = false; app.EnableAnimations = false; app.EnableAutoComplete = false; app.EnableSound = false; app.EnableTipWizard = false; app.ErrorCheckingOptions.BackgroundChecking = false; Workbook wb = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet); Worksheet ws = (Worksheet)wb.Worksheets[1]; for (int j = 0; j < dt.Rows.Count; j++) { for […]

在C#中创buildExcel工作簿时,类未注册错误

当我尝试使用以下代码访问Excel电子表格时,在安装Office 2007(版本12)的Visual Studio 2012中使用C#定义工作簿对象wrkbuk时出现“库未注册”错误 Microsoft.Office.Interop.Excel.Application excapp = new Microsoft.Office.Interop.Excel.Application(); string bookname = @"C:\Users\Public\Documents\RECRUITMENT & SELECTION\MOVEMENTS\MOVEMENTS\Miscellaneous Documents\VacanciesREAL.xls"; Workbook wrkbuk = excapp.Workbooks.Open(bookname); Worksheet wrksht = new Worksheet(); 错误的细节是 System.InvalidCastException未处理HResult = -2147467262消息=无法将types为“Microsoft.Office.Interop.Excel.ApplicationClass”的COM对象转换为接口types“Microsoft.Office.Interop.Excel._Application”。 此操作失败,因为IID为“{000208D5-0000-0000-C000-000000000046}”的接口的COM组件上的QueryInterface调用由于以下错误而失败:库未注册。 (来自HRESULT的exception:0x8002801D(TYPE_E_LIBNOTREGISTERED))。 来源= mscorlib程序 我已经在VS 2012中附带的Office 14 Primary Interop程序集中创build了对Microsoft.Office.Interop.Excel.dll的引用,同时也为dll的Office 12版本创build了一个对Microsoft.Office.Interop.Excel.dll的引用,但都无法解决此问题。 我试着用regasm注册dll,但是这也没有帮助。 我可以在以下行上创build工作表wrksht确定Office 14和Office 12 dll,因此问题似乎只影响工作簿定义。 2013年12月17日 试图重新安装Office 2007无济于事,但发现这个解决scheme,工作。 那是在 http://social.msdn.microsoft.com/Forums/vstudio/en-US/d3f92da7-96d3-404b-89d0-d236800ceae5/vs-2012-rc-and-visual-studio-tools-for-office?forum= VSTO 问题是来自多个版本的Office的代码 – 我有来自Office 14的代码,可能来自VS 2012安装 […]