让C# Excel导入导出 支持不同版本Office

让我详细为您讲解“让C# Excel导入导出 支持不同版本Office”的完整攻略。

1. 导入Excel

1.1. 安装相关依赖

首先需要在项目中通过NuGet安装以下两个包:

Install-Package Microsoft.Office.Interop.Excel
Install-Package ExcelDataReader

1.2. 读取Excel文件

读取Excel文件可以使用ExcelDataReader这个包提供的类,示例代码如下:

using ExcelDataReader;
using System.Data;
using System.IO;

//读取Excel文件
public static DataTable ReadExcel(string filePath, string sheetName = null) {
    using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) {
        using (var reader = ExcelReaderFactory.CreateReader(fs)) {
            //如果没有指定sheetName,则默认读取第一个sheet
            if (string.IsNullOrEmpty(sheetName)) {
                reader.Read();
            } else {
                while (reader.Name != sheetName && reader.Read()) { }
            }

            return reader.AsDataSet().Tables[0];
        }
    }
}

1.3. 导入Excel到数据库

读取完Excel文件后,可以将数据批量插入到数据库中,示例代码如下:

using System.Data;
using System.Data.SqlClient;

//导入数据到数据库
public static bool ImportData(DataTable data, string connectionString, string tableName) {
    using (var conn = new SqlConnection(connectionString)) {
        using (var bulkCopy = new SqlBulkCopy(conn)) {
            try {
                bulkCopy.DestinationTableName = tableName;
                bulkCopy.WriteToServer(data);
                return true;
            } catch {
                return false;
            }
        }
    }
}

2. 导出Excel

2.1. 安装相关依赖

需要在项目中通过NuGet安装以下这个包:

Install-Package EPPlus

2.2. 创建Excel文件

在导出Excel时,可以使用EPPlus这个包提供的类,示例代码如下:

using OfficeOpenXml;
using System.Data;
using System.IO;

//导出Excel文件
public static bool ExportExcel(DataTable data, string filePath, string sheetName = "Sheet1") {
    try {
        using (var package = new ExcelPackage(new FileInfo(filePath))) {
            var worksheet = package.Workbook.Worksheets.Add(sheetName);
            worksheet.Cells["A1"].LoadFromDataTable(data, true);
            package.Save();
        }

        return true;
    } catch {
        return false;
    }
}

2.3. 指定文件格式和版本

导出Excel时,可以指定文件格式和版本,示例代码如下:

using OfficeOpenXml;
using System.Data;
using System.IO;

//导出Excel文件
public static bool ExportExcel(DataTable data, string filePath, string sheetName = "Sheet1") {
    try {
        //根据文件扩展名判断文件格式
        var fileExtension = Path.GetExtension(filePath);
        ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
        using (var package = new ExcelPackage(new FileInfo(filePath))) {
            var worksheet = package.Workbook.Worksheets.Add(sheetName);
            worksheet.Cells["A1"].LoadFromDataTable(data, true);

            switch (fileExtension.ToLower()) {
                case ".xlsx":
                    package.SaveAs(new FileInfo(filePath));
                    break;
                case ".xls"://需要安装Office2007文件格式支持插件
                    package.SaveAs(new FileInfo(filePath), Excel.XlFileFormat.xlExcel8);
                    break;
            }
        }

        return true;
    } catch {
        return false;
    }
}

以上就是让C# Excel导入导出支持不同版本Office的完整攻略了,希望对您有所帮助。

示例说明:

  1. 导入Excel文件的示例:
var data = ReadExcel("test.xlsx");
var isSuccess = ImportData(data, connectionString, "TestTable");
  1. 导出Excel文件的示例:
var data = GetTestData();
var isSuccess = ExportExcel(data, "test.xlsx");

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:让C# Excel导入导出 支持不同版本Office - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • 浅析如何截获C#程序产生的日志

    浅析如何截获C#程序产生的日志 在处理C#程序的开发过程中,我们通常会遇到需要对程序产生的日志进行截获的情况,这有助于我们更好地掌握程序的执行情况,进行问题排查和优化。那么如何进行日志截获呢?下面我将以两个示例来分别说明。 示例1: 使用log4net进行日志输出 首先,我们需要在程序中引入log4net。在Visual Studio中,可以通过以下步骤来实…

    C# 2023年6月6日
    00
  • 记一次 .NET某医疗器械清洗系统 卡死分析

    一:背景 1. 讲故事 前段时间协助训练营里的一位朋友分析了一个程序卡死的问题,回过头来看这个案例比较经典,这篇稍微整理一下供后来者少踩坑吧。 二:WinDbg 分析 1. 为什么会卡死 因为是窗体程序,理所当然就是看主线程此时正在做什么? 可以用 ~0s ; k 看一下便知。 0:000> k # ChildEBP RetAddr 00 00aff1…

    C# 2023年4月22日
    00
  • C#内置泛型委托之Action委托

    当我们在C#中需要定义一个不带参数且没有返回值的委托时,可以使用Action委托来实现。Action委托是一个内置的泛型委托,用于封装一个无参数且无返回值的方法。 Action委托的语法 下面是Action委托的语法: public delegate void Action(); public delegate void Action<in T>…

    C# 2023年6月1日
    00
  • C#图片查看器实现方法

    C#图片查看器实现方法攻略 如果你想在C#中实现一个图片查看器,可以按照以下步骤进行。在这个教程中,我们将使用WinForm来实现这个功能,而不是使用WPF、ASP.NET或其他技术。同时,我们也将使用C#标准库中的一些功能,例如Image类和PictureBox控件。 步骤一:创建WinForm窗体 我们可以使用Visual Studio来创建一个新的Wi…

    C# 2023年6月1日
    00
  • C#获取文件夹所占空间大小的功能

    要实现该功能,可以使用C#内置的System.IO命名空间下的DirectoryInfo类和FileInfo类。下面是详细的步骤: 使用DirectoryInfo类创建文件夹的实例。 DirectoryInfor dirInfo = new DirectoryInfo(@"C:\Users\Administrator\Desktop\Example…

    C# 2023年6月1日
    00
  • C# .NET 中的缓存实现详情

    C#.NET中的缓存实现详情 什么是缓存? 缓存是计算机中常用的性能优化机制之一,它将一些已经经过计算的数据暂存在计算机的内存中,以便后续的使用,以减少后续访问时的计算代价。 C#.NET中的缓存实现 在C#.NET中,可以使用System.Runtime.Caching命名空间中的MemoryCache类进行缓存的实现。 MemoryCache类的基本用法…

    C# 2023年5月15日
    00
  • C#实现前向最大匹、字典树(分词、检索)的示例代码

    如果要实现分词和检索功能,可以用前向最大匹配和字典树算法。在C#中实现这两个功能,可以按照以下步骤进行: 实现前向最大匹配算法 前向最大匹配算法是将待分词的文本从左到右进行扫描,每次取出最长的词作为分词结果。为了实现该算法,需要将待分词的文本和词典中的词进行转换,以便进行匹配。下面是C#中的前向最大匹配算法示例代码: public static List&l…

    C# 2023年5月31日
    00
  • c# Winform同一数据源多个控件保持同步

    下面我将为您详细讲解“C# Winform同一数据源多个控件保持同步”的攻略。 1. 前言 在使用C# Winform进行开发时,我们经常会遇到这样的需求:多个控件需要绑定同一个数据源,并且需要保持同步。例如,我们要在一个表格控件和一个文本框控件中显示同一个数据集的内容,并且需要在其中任意一个控件上进行修改后,同步更新到数据源和其他控件上。这时候,我们就需要…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部