C# 读取 Excel 文件


class Program
{
    static Dictionary<string, string> result = new Dictionary<string, string> { };
    static void Main(string[] args)
    {

        ReadExcel();
        Console.WriteLine("Successful!");

        Console.ReadKey(true);

    }

    /// <summary> 
    /// 修改探测模式 
    /// </summary> 
    static void ChangTypeGuessRows(int count)
    {
        RegistryKey reg_TypeGuessRows = Registry.LocalMachine.CreateSubKey(@"SOFTWARE\Microsoft\Jet\4.0\Engines\Excel");
        reg_TypeGuessRows.SetValue("TypeGuessRows", count);
    }

    /// <summary> 
    /// 读取一个XLSW文件并显示出来 
    /// </summary> 
    static void ReadExcel()
    {
        string oleconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Data.xls;Extended Properties='Excel 8.0;HDR=NO;IMEX=1'";
        //  HDR=NO 即无字段 
        //   HDR=yes 即有字段,一般默认excel表中第1行的列标题为字段名,如姓名、年龄等 
        //如果您在连接字符串中指定 HDR=NO,Jet OLE DB 提供程序将自动为您命名字段(F1 表示第一个字段,F2 表示第二个字段,依此类推); 
        // IMEX 表示是否强制转换为文本 
        //   Excel 驱动程序读取指定源中一定数量的行(默认情况下为 8 行)以推测每列的数据类型。 
        //如果推测出列可能包含混合数据类型(尤其是混合了文本数据的数值数据时), 
        //驱动程序将决定采用占多数的数据类型,并对包含其他类型数据的单元返回空值。 
        //(如果各种数据类型的数量相当,则采用数值类型。) 
        //Excel 工作表中大部分单元格格式设置选项不会影响此数据类型判断。 
        //可以通过指定导入模式来修改 Excel 驱动程序的此行为。 
        //若要指定导入模式,请在“属性”窗口中将 IMEX=1 添加到 Excel 
        //连接管理器的连接字符串内的扩展属性值中。 
        /*
         *  当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。
         *
         *  当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
         *
         *  当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
         */

        OleDbConnection conn = new OleDbConnection(oleconn);
        conn.Open();
        string str_sql = "select * from [9月份$]";
        OleDbDataAdapter oda = new OleDbDataAdapter(str_sql, conn);
        DataSet ds = new DataSet();
        oda.Fill(ds);

        conn.Close();

        var dt = ds.Tables[0];

        int columnCount = dt.Columns.Count;
        int rowCount = dt.Rows.Count;

        ChangTypeGuessRows(rowCount + 10);

        using (TextWriter wrtier = new StreamWriter("sample.txt", true))
        {
            for (int i = 1; i < rowCount; i++)
            {
                if (string.IsNullOrEmpty(dt.Rows[i][0].ToString()) && string.IsNullOrEmpty(dt.Rows[i][1].ToString()))
                    continue;

                wrtier.WriteLine("select '{0}', '{1}' ", dt.Rows[i][0].ToString(), dt.Rows[i][1].ToString());
                if (i != rowCount - 2)
                {
                    wrtier.WriteLine("union all");
                }
            }
        }

        ChangTypeGuessRows(8);

        using (TextWriter wrtier = new StreamWriter("sample.txt", true))
        {
            for (int i = 1; i < rowCount; i++)
            {
                if (string.IsNullOrEmpty(dt.Rows[i][0].ToString()) && string.IsNullOrEmpty(dt.Rows[i][1].ToString()))
                    continue;

                wrtier.WriteLine("select '{0}', '{1}' ", dt.Rows[i][0].ToString(), dt.Rows[i][1].ToString());
                if (i != rowCount - 2)
                {
                    wrtier.WriteLine("union all");
                }
            }
        }

        Console.WriteLine(dt.Rows.Count);

    }
}

知识共享许可协议
《C# 读取 Excel 文件》 常伟华 创作。
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议 | 3.0 中国大陆许可协议进行许可。

站内公告

A PHP Error was encountered

Severity: Core Warning

Message: PHP Startup: zip: Unable to initialize module Module compiled with module API=20060613 PHP compiled with module API=20090626 These options need to match

Filename: Unknown

Line Number: 0

Backtrace: