导入一个excel文件到delphi的datagrid

我在.NET上试过这个代码 – 导入excel文件到devxpress datagrid – 它工作正常,但我必须创build一个程序,现在在delphi上做同样的工作。 我不太了解delphi,所以我需要一些想法如何做到这一点。

public static DataTable ImportExcelXLS(string FileName, bool hasHeaders) { string HDR = hasHeaders ? "Yes" : "No"; string strConn; if (FileName.Substring(FileName.LastIndexOf('.')).ToLower() == ".xlsx") strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\""; else strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties=\"Excel 8.0;HDR=" + HDR + ";IMEX=0\""; //DataSet output = new DataSet(); using (OleDbConnection conn = new OleDbConnection(strConn)) { conn.Open(); DataTable schemaTable = conn.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); foreach (DataRow schemaRow in schemaTable.Rows) { string sheet = schemaRow["TABLE_NAME"].ToString(); if (!sheet.EndsWith("_")) { try { OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + sheet + "]", conn); cmd.CommandType = CommandType.Text; DataTable outputTable = new DataTable(sheet); new OleDbDataAdapter(cmd).Fill(outputTable); if (outputTable.Rows.Count > 0) { return outputTable; } } catch (Exception ex) { throw new Exception(ex.Message + string.Format("Sheet:{0}.File:F{1}", sheet, FileName), ex); } } } } return null; } 

您有三个与Microsoft Excel表互操作的主要选项

1)你使用OLE DB来访问数据。 这主要有三个误区:

  • 微软的ADO已经被弃用,而且Delphi ADO库是个bug。 这些错误有解决方法,但你会花时间检测他们和学习这些技巧。
  • 这需要安装Microsoft Excel,这不是免费的程序
  • 电子表格不是表格数据,因此您只能以这种方式读取最简单的结构化数据。

但是,如果它工作,它是快速和方便的。

  • ADO与Delphi XE中的XLSX文件
  • 从Delphi更新Excel ADO的单元格查询
  • ADO SQLtypes强制转换为string(Excel)
  • 使用ADODataset组件打开Excel电子表格
  • delphiADO与Excel 2010或更新,与.RecordCount问题
  • 如何使用ADO将值插入Excel文件?
  • Delphi ADO查询
  • Delphi – Excel行通过ADO Query获取
  • 当试图访问Delphi 7中的Excel表时提供者select

你也可以阅读很多教程和指导。 例如,使用BabelFish或GoogleTranslate,你可以尝试http://devdelphi.ru/?p=63


2)您可以使用运行的Excel应用程序作为COM服务器。 您只需要将ExcelApplication组件放在窗体上。 请参阅c:\ RAD Studio \ 9.0 \ OCX \ Servers \

这可以说是使用Excel最常用的方法。 它有几个优点:

  • COM接口是Excel的一个自然的API,所以你可以访问最多的function
  • 您可以在Visual Basic或C ++中采取任何代码示例,并逐字将其转换为Delphi
  • 微软有很多这个API的文档
  • 对于大多数操作,您可以使用内置的Excelmacroslogging器来获得一个现成的程序,如何在Excel中做一些事情
  • 通常Excel的意思是最终权威是一些文件是否有效。 所以你可以确定你的程序能够读取任何给定的文件。 如果没有 – 你可以责怪微软的Excel,而不是你的程序。
  • 循环遍历行,然后遍历单元,比掌握什么是SQL以及如何使用它更容易。

然而

  • 这需要安装Microsoft Excel,这不是免费的程序
  • 这很慢。 即使使用数组传输数据
  • 对于非英文语言环境,COM API中存在未定义的错误
  • Delphi COM实现中也有一些错误。

同样,你有很多使用该组件的教程。 而且你有很多关于使用Visual Basic来控制Excel的微软教程

等等。 如果你想改变你的方法 – 你会有很多的信息

2.1)也可以使用OpenOffice.org(运行scalc.exe服务器,通过COM或HTTP控制,就像运行excel.exe服务器一样)读取/写入Microsoft Office文件,一些networking服务器执行此操作。 但是,有可能我没有看到这种方式受欢迎。 所以只是提到它。


3)有一些Delphi本地库可以直接读取/写入Excel文件

  • 这可能是最快的方法,所以当你有很多数据的时候它就会变得很糟糕
  • 你可以控制发生的事情 – 你可以随时改变图书馆,只需要改变你自己的程序
  • 你的程序变得自成一体 – 既不需要Excel本身,也不需要安装Excel OLE DB驱动程序。

然而

  • 这些图书馆总是用Excel来追赶,因此它们只支持其中的一部分function,而且通常是一个相当狭窄的function
  • 甚至文件格式:一些库仅支持XLS,一些仅支持XML和XLSX。 特别便宜或免费的。
  • 这些图书馆,就像任何程序一样,都有它们的缺陷。 而且你不能说“这就是Excel的工作原理”。