gpt4 book ai didi

excel - 在delphi上将excel文件导入到datagrid

转载 作者:行者123 更新时间:2023-12-02 02:39:59 27 4
gpt4 key购买 nike

我已经在 .NET 上尝试过这段代码 - 将 excel 文件导入到 devxpress datagrid - 它工作得很好,但我现在必须创建一个在 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 来获取数据。这有三个主要缺陷:

  • Microsoft ADO 已被弃用,Delphi ADO 库漏洞百出。这些错误有解决方法,但您需要花时间检测它们并学习这些技巧。
  • 这需要安装 Microsoft Excel,而且不是免费程序
  • 电子表格不是表格数据,因此您只能通过这种方式读取最简单的结构化数据。

但如果可行的话,它又快又方便。

您还可以阅读大量教程和操作方法。例如,使用 BabelFish 或 GoogleTranslate 您可以尝试 http://devdelphi.ru/?p=63

<小时/>

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

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

  • COM 接口(interface)是 Excel 的天然 API,因此您可以使用其大部分功能
  • 您可以使用 Visual Basic 或 C++ 中的任何代码示例并将其逐字转换为 Delphi
  • Microsoft 有很多该 API 的文档
  • 对于大多数操作,您可以使用内置的 Excel 宏记录器来获取现成的程序,了解如何在 Excel 中执行操作
  • 通常,Excel 对于某些文件是否有效具有最终权威。因此您可以确定您的程序能够读取给定的任何文件。如果没有 - 您可以将此归咎于 Microsoft Excel,而不是您的程序。
  • 可以说,先循环行,然后循环单元格,比掌握什么是 SQL 以及如何使用它更容易。

但是

  • 这需要安装 Microsoft Excel,而且不是免费程序
  • 这很慢。甚至使用数组进行数据传输
  • 对于非英语语言环境,COM API 中存在未修复的错误
  • Delphi COM 实现中也存在一些错误。

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

等等。如果您想改变您的方法 - 您将获得大量信息

2.1) 人们还可以使用 OpenOffice.org(运行 scalc.exe 服务器,通过 COM 或 HTTP 控制,就像运行 excel.exe 服务器一样)来读取/写入 Microsoft Office 文件,并且某些 Web 服务器可以执行此操作。但尽管有可能,我并没有看到这种方法流行。所以只是提一下。

<小时/>

3)有一些Delphi原生库可以直接读写Excel文件

  • 这可能是最快的方法,因此当您有大量数据时,它会很有效
  • 您可以控制所发生的事情 - 您随时可以更改库,就像更改自己的程序一样
  • 您的程序变得独立 - 它既不需要 Excel 本身,也不需要安装 Excel OLE DB 驱动程序。

但是

  • 这些库总是追赶 Excel,因此它们仅支持其功能的子集,而且通常是相当狭窄的功能
  • 甚至文件格式:有些库仅支持 XLS,有些库仅支持 XML 和 XLSX。特别是便宜或免费的。
  • 这些库就像任何程序一样,也有其错误。而且您不能说“这就是 Excel 的工作原理。”

关于excel - 在delphi上将excel文件导入到datagrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19923613/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com