C#编程创建Excel与Access文件的几种方法

木白
木白
发布时间:2026-10-13 | 6人浏览过
原创

本文介绍了在C#环境下使用OLEDB、ADOX及Excel COM对象创建Excel和Access文件的三种主要技术方案,详细说明了连接字符串配置、代码实现及各自适用场景。

创建Excel文件

在开发中,若需将二维数据导出为Excel格式,可根据是否需要格式保留及是否依赖Office客户端软件,选择以下不同方案:

第1步:使用OLEDB轻量级创建Excel文件

此方法适用于仅需创建包含数据的Excel文件,且不需要复杂的单元格样式或公式。它不依赖本地安装的Microsoft Excel软件,只需引用 System.Data.OleDb 即可实现。当执行建表SQL时,若目标文件不存在,系统会自动创建该Excel文件。

  • 连接字符串要点:指定Provider为Jet引擎,并设置Extended Properties为 Excel 8.0(对应.xls格式)。
  • 操作逻辑:打开连接 → 执行CREATE TABLE SQL语句 → 关闭连接。
using System.Data.OleDb;

public static void CreateExcelFileByOLEDB()
{
    // 注意:路径末尾必须是.xls文件名
    string OLEDBConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + 
                          "Data Source=c://aa2.xls;" + 
                          "Extended Properties=Excel 8.0;";
    
    // 构建建表SQL,定义列名及数据类型
    string strCreateTableSQL = @" CREATE TABLE 测试表 ( 
            ID INTEGER, 
            UserID INTEGER, 
            UserIP VARCHAR(50), 
            PostTime DATETIME, 
            FromParm VARCHAR(255) ) ";
    
    OleDbConnection oConn = new OleDbConnection(OLEDBConnStr);
    try
    {
        oConn.Open();
        OleDbCommand oCreateComm = new OleDbCommand(strCreateTableSQL, oConn);
        oCreateComm.ExecuteNonQuery();
        // 此时Excel文件已被创建
    }
    finally
    {
        if (oConn.State == ConnectionState.Open)
            oConn.Close();
    }
}

第2步:生成扩展名为XLS的纯文本文件

有时为了极速写入大量数据,可以直接生成由制表符(Tab)或逗号隔开的文本文件,并将后缀命名为 .xls。Excel软件能自动识别这种格式并分列显示。但需注意,读取此类文件时,连接字符串中的Driver应指向文本驱动引擎,而非Excel驱动引擎。

  • 读取方式差异:若用OLEDB读取,Provider需改为文本驱动(如 Microsoft.Jet.OLEDB.4.0 配合 Extended Properties='text;HDR=YES')。
  • ODBC方式:可使用 Microsoft Text Driver (*.txt; *.csv) 进行读取。

第3步:使用Excel COM对象创建完整Excel文件

若生成的Excel文件需要包含特定的格式、图表或宏,必须使用Microsoft Excel Object Library COM组件。此方法要求服务器或客户端已安装Microsoft Office Excel,并且需要注意进程释放,避免后台残留Excel进程。

  1. 添加引用:在项目中添加对 Microsoft Excel xx.x Object Library 的引用。
  2. 创建流程:实例化Application → 添加Workbook → 保存文件 → Quit退出。
using Excel = Microsoft.Office.Interop.Excel;
// 引入 Missing 类处理可选参数
using System.Reflection;

public static void CreateExcelFileByCOM()
{
    string FileName = "c://aa_com.xls";
    object miss = System.Reflection.Missing.Value;
    
    // 初始化Excel应用
    Excel.Application m_objExcel = new Excel.Application();
    m_objExcel.Visible = false;
    m_objExcel.DisplayAlerts = false;
    
    try
    {
        // 获取工作簿集合
        Excel.Workbooks m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
        // 添加新工作簿
        Excel.Workbook m_objBook = (Excel.Workbook)(m_objBooks.Add(miss));
        
        // 保存工作簿
        m_objBook.SaveAs(FileName, miss, miss, miss, miss, miss,
            Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss);
        
        // 关闭工作簿
        m_objBook.Close(false, miss, miss);
    }
    finally
    {
        // 退出Excel并释放资源
        m_objExcel.Quit();
        Marshal.ReleaseComObject(m_objExcel); // 建议显式释放
    }
}

创建Access数据库文件

Access作为关系型数据库管理系统,其文件结构比Excel复杂。创建Access数据库及其初始表结构,推荐使用 ADOX (ActiveX Data Objects Extensions for DDL and Security) 库。OLEDB用于连接和操作数据,而ADOX专门用于创建/修改数据库架构(Schema)。

第4步:使用ADOX创建Access库及表

在使用前,需在项目中添加对 Microsoft ADO Ext. x.x for DDL and Security 的COM引用。

  1. 创建数据库:通过 CatalogClass.Create 方法,传入Jet OLEDB连接字符串即可生成.mdb文件。
  2. 创建表:实例化 TableClass,设置父目录,定义列属性(如自增ID、字符串长度),并将其添加到表的Columns集合。
  3. 设置主键:通过 Keys.Append 方法为主表建立主键约束。
using ADOX;
using System.IO;

public static void CreateAccessFile(string FileName)
{
    // 如果文件不存在则创建
    if (!File.Exists(FileName))
    {
        // 1. 创建Catalog并初始化数据库
        CatalogClass cat = new CatalogClass();
        // Provider为Jet 4.0,指定数据源路径
        cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";");
        
        // 2. 创建表和字段
        TableClass tbl = new TableClass();
        tbl.ParentCatalog = cat;
        tbl.Name = "MyTable";
        
        // 添加自动增长的主键列
        ColumnClass col = new ColumnClass();
        col.ParentCatalog = cat;
        col.Type = DataTypeEnum.adInteger; // 必须先设置类型
        col.Name = "id";
        col.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
        col.Properties["AutoIncrement"].Value = true;
        tbl.Columns.Append(col, DataTypeEnum.adInteger, 0);
        
        // 添加普通文本列
        ColumnClass col2 = new ColumnClass();
        col2.ParentCatalog = cat;
        col2.Name = "Description";
        col2.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
        tbl.Columns.Append(col2, DataTypeEnum.adVarChar, 25);
        
        // 3. 设置主键
        tbl.Keys.Append("PrimaryKey", KeyTypeEnum.adKeyPrimary, "id", "", "");
        
        // 4. 将表附加到目录
        cat.Tables.Append(tbl);
        
        // 释放资源
        tbl = null;
        cat = null;
    }
}

以上就是C#.net编程创建Access文件和Excel文件的方法的详细解析。这些方法涵盖了从简单数据导出到结构化数据库创建的常见需求。更多关于C#数据操作的相关内容感兴趣的读者可查看本站专题,更多关于C#程序设计方面的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表