最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2014年10月20日 09:03:03   作者:omuying  
這篇文章主要介紹了C# 解析 Excel 并且生成 Csv 文件的方法和代碼分享,有需要的朋友可以參考下

今天工作中遇到一個(gè)需求,就是獲取 excel 里面的內(nèi)容,并且把 excel 另存為 csv,因?yàn)楸救艘郧拔唇佑|過,所以下面整理出來的代碼均來自網(wǎng)絡(luò),具體參考鏈接已丟失,原作者保留所有權(quán)利!

例子:

復(fù)制代碼 代碼如下:

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 文件

復(fù)制代碼 代碼如下:

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 轉(zhuǎn) 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 轉(zhuǎn) 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();
            }
        }
    }
}


需要特別指出的是:需要在項(xiàng)目中添加 Microsoft.Office.Interop.Excel.dll 文件,具體操作:選中引用->右鍵添加引用->瀏覽找到 Microsoft.Office.Interop.Excel,添加引用。

相關(guān)文章

  • C#實(shí)現(xiàn)將音頻PCM數(shù)據(jù)封裝成wav文件

    C#實(shí)現(xiàn)將音頻PCM數(shù)據(jù)封裝成wav文件

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)將音頻PCM數(shù)據(jù)封裝成wav文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2023-10-10
  • C#遞歸算法之分而治之策略

    C#遞歸算法之分而治之策略

    分而治之的策略主要是將大量復(fù)雜的問題分成多個(gè)子問題,解決各個(gè)子問題,從而解決原問題,下面就讓我們看看具體如何實(shí)現(xiàn)。
    2016-06-06
  • C#使用CEFSharp獲取動態(tài)網(wǎng)頁源碼的演示步驟

    C#使用CEFSharp獲取動態(tài)網(wǎng)頁源碼的演示步驟

    CEFSharp是一個(gè)用C#編寫的庫,它是Chromium Embedded Framework (CEF) 的.NET封裝和擴(kuò)展,CEF允許開發(fā)者在自己的應(yīng)用程序中嵌入一個(gè)功能強(qiáng)大的HTML渲染引擎,從而能夠呈現(xiàn)網(wǎng)頁內(nèi)容,本文介紹了C#如何使用CEFSharp獲取動態(tài)網(wǎng)頁源碼,需要的朋友可以參考下
    2024-08-08
  • WPF中ImageBrush常用方式介紹

    WPF中ImageBrush常用方式介紹

    這篇文章介紹了WPF中ImageBrush的常用方式,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 超炫酷的WPF實(shí)現(xiàn)Loading控件效果

    超炫酷的WPF實(shí)現(xiàn)Loading控件效果

    這篇文章主要介紹了超炫酷的WPF實(shí)現(xiàn)Loading控件效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2015-11-11
  • 解析C#中斷言與異常的應(yīng)用方式及異常處理的流程控制

    解析C#中斷言與異常的應(yīng)用方式及異常處理的流程控制

    這篇文章主要介紹了C#中斷言與異常的應(yīng)用方式及異常處理的流程控制,一般來說斷言用于修正程序員自己的錯(cuò)誤而異常用于應(yīng)對程序運(yùn)行過程中可能出現(xiàn)的錯(cuò)誤,需要的朋友可以參考下
    2016-01-01
  • c#在sql中存取圖片image示例

    c#在sql中存取圖片image示例

    這篇文章主要介紹了c#在sql中存取圖片image示例,需要的朋友可以參考下
    2014-03-03
  • 解決Unity項(xiàng)目中UI腳本丟失的問題

    解決Unity項(xiàng)目中UI腳本丟失的問題

    這篇文章主要介紹了解決Unity項(xiàng)目中UI腳本丟失的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#中的lock、Monitor、Mutex學(xué)習(xí)筆記

    C#中的lock、Monitor、Mutex學(xué)習(xí)筆記

    這篇文章主要介紹了C#中的lock、Monitor、Mutex學(xué)習(xí)筆記,本文講解的都是線程同步的一些知識,需要的朋友可以參考下
    2015-01-01
  • 基于C#實(shí)現(xiàn)屏幕取色器

    基于C#實(shí)現(xiàn)屏幕取色器

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)簡易的屏幕取色器,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12

最新評論

永和县| 邓州市| 紫云| 周至县| 朔州市| 彰化市| 平远县| 任丘市| 淄博市| 安达市| 兴义市| 石渠县| 遂平县| 吉安市| 鄂伦春自治旗| 丰原市| 当阳市| 金川县| 商水县| 青海省| 辽阳市| 壤塘县| 定州市| 普兰县| 浮梁县| 赣州市| 图木舒克市| 莱阳市| 通榆县| 兴山县| 峨眉山市| 阿拉善右旗| 和硕县| 南澳县| 板桥市| 西青区| 登封市| 梨树县| 溆浦县| 平陆县| 焦作市|