当前位置: 首页 > 编程笔记 >

C# 解析 Excel 并且生成 Csv 文件代码分析

涂溪叠
2023-03-14
本文向大家介绍C# 解析 Excel 并且生成 Csv 文件代码分析,包括了C# 解析 Excel 并且生成 Csv 文件代码分析的使用技巧和注意事项,需要的朋友参考一下

今天工作中遇到一个需求,就是获取 excel 里面的内容,并且把 excel 另存为 csv,因为本人以前未接触过,所以下面整理出来的代码均来自网络,具体参考链接已丢失,原作者保留所有权利!

例子:


using System;

using System.Data;

namespace ExportExcelToCode {     class ExcelOperater     {         public void Operater()         {             // Excel 路径             string excelPath = "";             // Csv 存放路径             string csvPath = "";

            // 获取 Excel Sheet 名称列表             string[] sheetNameList = ExcelUtils.GetSheetNameList(excelPath);

            if (sheetNameList != null && sheetNameList.Length > 0)             {                 foreach (string sheetName in sheetNameList)                 {                     string itemName = sheetName.TrimEnd(new char[] { '$' });

                    // 解析 Excel 为 DataTable 对象                     DataTable dataTable = ExcelUtils.ExcelToDataTable(excelPath, itemName);                     if (dataTable != null && dataTable.Rows.Count > 0)                     {                         // 生成 Csv 文件                         ExcelUtils.ExcelToCsv(excelPath, csvPath, itemName, "|#|", 0);                     }                 }             }         }     } }

ExcelUtils.cs 文件


using System;   

using System.Data;

using Microsoft.Office.Interop.Excel;

using Excel = Microsoft.Office.Interop.Excel;

namespace ExportExcelToCode {     public partial class ExcelUtils     {         /// <summary>         /// 获取 Sheet 名称         /// </summary>         /// <param name="filePath"></param>         /// <returns></returns>         public static string[] GetSheetNameList(string filePath)         {             try             {                 string connectionText = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + "Extended Properties='Excel 12.0;HDR=YES;IMEX=1';";

                System.Data.OleDb.OleDbConnection oleDbConnection = new System.Data.OleDb.OleDbConnection(connectionText);

                oleDbConnection.Open();

                System.Data.DataTable dataTable = oleDbConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); ;

                string[] sheetNameList = new string[dataTable.Rows.Count];

                for (int index = 0; index < dataTable.Rows.Count; index++)                 {                     sheetNameList[index] = dataTable.Rows[index][2].ToString();                 }

                oleDbConnection.Close();

                return sheetNameList;             }             catch (Exception ex)             {                 return null;             }         }

        /// <summary>         /// Excel 转 DataTable         /// </summary>         /// <param name="filePath"></param>         /// <param name="sheetName"></param>         /// <returns></returns>         public static System.Data.DataTable ExcelToDataTable(string filePath, string sheetName)         {             try             {                 string connectionText = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath + ";" + "Extended Properties='Excel 12.0;HDR=YES;IMEX=1';";                 string selectText = string.Format("select * from [{0}$]", sheetName);

                DataSet dataSet = new DataSet();

                System.Data.OleDb.OleDbConnection oleDbConnection = new System.Data.OleDb.OleDbConnection(connectionText);

                oleDbConnection.Open();

                System.Data.OleDb.OleDbDataAdapter oleDbDataAdapter = new System.Data.OleDb.OleDbDataAdapter(selectText, connectionText);                 oleDbDataAdapter.Fill(dataSet, sheetName);

                oleDbConnection.Close();

                return dataSet.Tables[sheetName];             }             catch (Exception ex)             {                 return null;             }         }

        /// <summary>         /// Excel 转 Csv         /// </summary>         /// <param name="sourceExcelPathAndName"></param>         /// <param name="targetCSVPathAndName"></param>         /// <param name="excelSheetName"></param>         /// <param name="columnDelimeter"></param>         /// <param name="headerRowsToSkip"></param>         /// <returns></returns>         public static bool ExcelToCsv(string sourceExcelPathAndName, string targetCSVPathAndName, string excelSheetName, string columnDelimeter, int headerRowsToSkip)         {             Excel.Application oXL = null;             Excel.Workbooks workbooks = null;             Workbook mWorkBook = null;             Sheets mWorkSheets = null;             Worksheet mWSheet = null;

            try             {                 oXL = new Excel.Application();                 oXL.Visible = false;                 oXL.DisplayAlerts = false;                 workbooks = oXL.Workbooks;                 mWorkBook = workbooks.Open(sourceExcelPathAndName, 0, false, 5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);                 mWorkSheets = mWorkBook.Worksheets;                 mWSheet = (Worksheet)mWorkSheets.get_Item(excelSheetName);                 Excel.Range range = mWSheet.UsedRange;                 Excel.Range rngCurrentRow;                 for (int i = 0; i < headerRowsToSkip; i++)                 {                     rngCurrentRow = range.get_Range("A1", Type.Missing).EntireRow;                     rngCurrentRow.Delete(XlDeleteShiftDirection.xlShiftUp);                 }                 range.Replace("\n", " ", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);                 range.Replace(",", columnDelimeter, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

                mWorkBook.SaveAs(targetCSVPathAndName, Excel.XlFileFormat.xlCSV,                 Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,                 Type.Missing, Type.Missing, Type.Missing,                 Type.Missing, false);                 return true;             }             catch (Exception ex)             {                 return false;             }             finally             {                 if (mWSheet != null) mWSheet = null;                 if (mWorkBook != null) mWorkBook.Close(Type.Missing, Type.Missing, Type.Missing);                 if (mWorkBook != null) mWorkBook = null;                 if (oXL != null) oXL.Quit();                 System.Runtime.InteropServices.Marshal.ReleaseComObject(oXL);                 if (oXL != null) oXL = null;                 GC.WaitForPendingFinalizers();                 GC.Collect();                 GC.WaitForPendingFinalizers();                 GC.Collect();             }         }     } }


需要特别指出的是:需要在项目中添加 Microsoft.Office.Interop.Excel.dll 文件,具体操作:选中引用->右键添加引用->浏览找到 Microsoft.Office.Interop.Excel,添加引用。

 类似资料:
  • 我有一个由以下字符|分隔的csv文件。该文件有三列;一个是url(COL1),另一个是小文本(COL3),最后一个是图像位置(COL2)。我需要一个脚本,用csv文件中的数据给我这样的html代码: 我该怎么做?

  • 我正在使用snmp4j开发snmp管理器。我需要读取MIB文本文件并生成相应的XML文件。是否有任何SNMP4j库可用于解析Mib文本文件并获取每个对象的数据。如果snmp4j不能解决我的问题,是否有其他类似的开源可用? 谢谢

  • 本文向大家介绍C++生成和解析XML文件的讲解,包括了C++生成和解析XML文件的讲解的使用技巧和注意事项,需要的朋友参考一下 概述 1.xml 指可扩展标记语言(EXtensible Markup Language) 2.xml 是一种标记语言,类似html 3.xml 的设计宗旨是传输数据,而非显示数据 4.xml 标签没有被预定义。需要自行定义标签 XML与HTML区别 1.xml 不是 h

  • 我已经阅读了JavaParser手册,并开始构建自己的示例。我想要实现的是阅读Java代码并在其上插入新的代码行。具体来说,我想在每个和语句之前初始化一个计数器,并在语句体内部对计数器进行递增。我这样做的目的是为一组指定的运行运行运行新代码,并观察每个分支执行了多少次。我使用JavaParser来解析和添加代码,因为我想自动生成和运行所有东西。 例如,我们有以下简单的代码: 在解析之后,我想有如下

  • 本文向大家介绍NodeJs之word文件生成与解析的实现代码,包括了NodeJs之word文件生成与解析的实现代码的使用技巧和注意事项,需要的朋友参考一下 一,介绍与需求  1.1,介绍 1, officegen 模块可以为Microsoft Office 2007及更高版本生成Office Open XML文件。此模块不依赖于任何框架,您不需要安装Microsoft Office,因此您可以将它

  • 我正在进入一个比赛的分钟,但在第一天的编码,我得到的错误,你可以看到的问题,以及我的项目不能建立 如果你需要更多的截图只管问。