• 【C#】采用OleDB读取Excel文件转DataTable


    using System;
    using System.Data;
    using System.Data.OleDb;
    using System.IO;
    using System.Linq;
    using System.Text;
    
    namespace DaliyTest
    {
        public class ExcelToDataTable : IWork
        {
            public void Work()
            {
                var path = AppDomain.CurrentDomain.BaseDirectory + "读取文件";
    
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }
    
                //文件路径
                var filePath = Directory.GetFiles(path).FirstOrDefault();
                var fileNames = filePath.IndexOf("\", StringComparison.Ordinal) != 0 ? filePath.Split('\') : new[] { filePath };
    
                //文件名
                var fileName = fileNames[fileNames.Length - 1];
    
                var ds = GetExcelData(filePath, fileName, "sheet名称");
    
                var newsList = new List<News>();
    
                foreach (DataRow item in ds.Tables[0].Rows)
                {
                    var news = new News
                    {
                        Name = StringUtil.NullToEmpty(item[""]),
                        Title = StringUtil.NullToEmpty(item[""]),
                        Link = StringUtil.NullToEmpty(item[""])
                    };
    
                    newsList.Add(newsNagative);
                };
            }
    
            /// <summary>
            /// 将Excel转为DataSet
            /// </summary>
            /// <param name="filepath">文件路径</param>
            /// <param name="filename">文件名</param>
            /// <param name="_sheetName">sheet名</param>
            /// <returns>DataSet</returns>
            public static DataSet GetExcelData(string filepath, string filename, string _sheetName)
            {
                var dtExcel = new DataSet();
    
                if (string.IsNullOrEmpty(filepath)) return dtExcel;
    
                try
                {
                    string connString;
                    var extension = Path.GetExtension(filepath);
    
                    switch (extension)
                    {
                        case ".xls":
                            connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath +
                                         ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
                            break;
                        case ".xlsx":
                            connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath +
                                         ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";
                            break;
                        default:
                            connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath +
                                         ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";
                            break;
                    }
    
                    using (var conn = new OleDbConnection(connString))
                    {
                        conn.Open();
    
                        var dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,
                            new object[] { null, null, _sheetName, null });
                        conn.Close();
    
                        var builder = new StringBuilder(string.Format("SELECT * FROM [{0}$] WHERE 1=1 ", _sheetName));
    
                        foreach (DataRow row in dt.Rows)
                        {
                            builder.AppendFormat(" AND {0}  IS NOT NULL AND {0} <> '' ", row["Column_name"]);
                        }
    
                        conn.Open();
                        using (var oledAdapter = new OleDbDataAdapter(builder.ToString(), conn))
                        {
                            oledAdapter.Fill(dtExcel);
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("Open xls file error
    
    " + ex.Message, ex);
                }
    
                return dtExcel;
            }
        }
    }
     public static class StringUtil
          {
            public static string NullToEmpty(object sValue)
            {
                if (sValue == DBNull.Value)
                    return "--";
                return sValue == null ? "--" : ToDBC(sValue.ToString().Trim());
            }
    
            /// <summary>
            ///     转半角
            /// </summary>
            /// <param name="input"></param>
            /// <returns></returns>
            public static String ToDBC(this String input)
            {
                var c = input.ToCharArray();
                for (int i = 0; i < c.Length; i++)
                {
                    if (c[i] == 12288)
                    {
                        c[i] = (char)32;
                        continue;
                    }
                    if (c[i] > 65280 && c[i] < 65375)
                        c[i] = (char)(c[i] - 65248);
                }
                return new String(c);
            }
        }

    如果报错:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序

    本错误是由于你使用了ACCESS2007版本建立的数据库,但服务器中没有相配合使用的程序,所以出错.

    解决办法1:(验证可以)

    http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe下载。然后安装就行了。

    或者百度网盘下载 下载地址

    解决办法2: (未验证)

    选择 该应用程序的 应用程序池 ------>选择高级设置 --------->启用32位应用程序 ------->true  

     

    未雨绸缪、富有耐心、律己严厉和不偏不倚
  • 相关阅读:
    nodejs+mongoose操作mongodb副本集实例
    创建mongodb副本集操作实例
    SpringBoot(二)Web整合开发
    SpringBoot(一)走进Springboot的世界
    Git(二)Git几个区的关系与Git和GitHub的关联
    Git(一)之基本操作详解
    HttpClient(二)HttpClient使用Ip代理与处理连接超时
    HttpClient(一)HttpClient抓取网页基本信息
    Jsoup(一)Jsoup详解(官方)
    MongoDB(一)环境搭建与初始配置
  • 原文地址:https://www.cnblogs.com/chuankang/p/8574210.html
Copyright © 2020-2023  润新知