使用C# 操作了xls 格式的文件!

今天数据库管理员说数据有重复 于是导出进行修改 用C#写了个命令行工具. 使用的是最笨的办法. 不过也是没办法的办法 整了一下午

特此记录 纪念曾经踩过的大坑.


一坑, 这个xls 需要用wps打开才能使用 这边打开那边跑程序 要不然会提示. 驱动错误.真实服了 难道是我看错了?


二坑, 一开始提示我 ""字段太小而不能接受所要添加的数据的数量的解决方案", \

我晕 我的是xls文件啊" 真坑的一比"后来把第一行数据设置很长后跑通了 简直是莫名其妙 xls文件也有字段长度了?


三坑

c# 的语法问题 

string ss = "<br />";

string[] arr = s.Split(ss,StringSplitOptions.None);   这个是用来分割字符串为数组的语句

string s = string.Join("<br />", array); 这个是用来合并数组的例子

我一直以为我用的假的C# 真的  几年没用 怎么就变成这种奇怪的样子了
s.split("<br />")
arr.join("<br />")
这么简单的不好吗. 


using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace fixDataTools
{
    class Program
    {
        static void Main(string[] args)
        {


            String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:/content2.xls;Extended Properties=Excel 8.0;";
            OleDbConnection objConn = new OleDbConnection(sConnectionString);
            objConn.Open();

           

            //DataTable tb = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            //foreach (DataRow row in tb.Rows)   
            //{
            //    //遍历弹出各Sheet的名称
            //    Console.Write(row["TABLE_NAME"]);
            //}


            OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [Sheet1$]", objConn);
            OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
            objAdapter1.SelectCommand = objCmdSelect;
            DataSet ds = new DataSet();
            //将Excel中数据填充到数据集
            objAdapter1.Fill(ds, "XLData");
            OleDbCommandBuilder cb = new OleDbCommandBuilder(objAdapter1);

            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                string s = ds.Tables[0].Rows[i][3].ToString();
                if (s.Contains("【主要用途】")||s.Contains("【安全储运】")||s.Contains("【泄漏应急处置】"))
                {
                    String[] ss = new string[]{"<br />"};
                    String[] array = s.Split(ss,StringSplitOptions.None);
                    for (int j = 0; j < array.Length; j++)
                    {
                        if (j < array.Length) { 
                            if (array[j].Contains("【主要用途】"))
                            {
                                j++;

                                if (j + 1 < array.Length) {
                                    array[j + 1] = "";
                                    j++;
                                }


                                if (j + 1 < array.Length) {
                                    array[j + 1] = "";
                                    j++;
                                }
                                
                                if (j + 1 < array.Length) {
                                    array[j + 1] = "";
                                    j++;
                                }
                                
                            }
                        }

                        if (j < array.Length)
                        {
                            if (array[j].Contains("【安全储运】"))
                            {
                                j++;

                                if (j + 1 < array.Length)
                                {
                                    array[j + 1] = "";
                                    j++;
                                }


                                if (j + 1 < array.Length)
                                {
                                    array[j + 1] = "";
                                    j++;
                                }
                            }
                        }

                        if (j < array.Length)
                        {
                            if (array[j].Contains("【泄漏应急处置】"))
                            {
                                j++;

                                if (j + 1 < array.Length)
                                {
                                    array[j + 1] = "";
                                    j++;
                                }


                                if (j + 1 < array.Length)
                                {
                                    array[j + 1] = "";
                                    j++;
                                }

                                if (j + 1 < array.Length)
                                {
                                    array[j + 1] = "";
                                    j++;
                                }

                                if (j + 1 < array.Length)
                                {
                                    array[j + 1] = "";
                                    j++;
                                }

                                if (j + 1 < array.Length)
                                {
                                    array[j + 1] = "";
                                    j++;
                                }
                            }

                        }
                    }
                    s = string.Join("<br />", array);
       
                    
                }
                addNewRows(s);

            }


            


            objConn.Close();
        }



        private static void addNewRows(string s)
        {
            s = s.Replace("(", "(");
            s = s.Replace(")", ")");
            s = s.Replace("'", "~");
            String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:/t1.xls;Extended Properties=Excel 8.0;";

            OleDbConnection objConn = new OleDbConnection(sConnectionString);
            objConn.Open();
            OleDbCommand cmd = new OleDbCommand("insert into [Sheet1$] values ('" + s +"')", objConn);
            cmd.ExecuteNonQuery();
            objConn.Close();

        }
    }

    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值