1. 程式人生 > >C#實戰021:OleDb操作-新增Excel中的sheet工作表

C#實戰021:OleDb操作-新增Excel中的sheet工作表

      獲取到lExcel中的sheet中的所有工作表,我們就可以來建立新的sheet工作表了,首先我們判斷下Excel中的sheet中的所有工作表中是否存在我們需要建立的sheet工作表,如果沒有的話我們在建立。

OleDbCommand cmd = myCon.CreateCommand();//建立工作表命令
string sheetName = "刀具預估數量";
if (tableName.Contains(sheetName))
{
    cmd.CommandText = "DROP TABLE 刀具預估數量";
    cmd.ExecuteNonQuery();// 執行建立sheet的語句
}
cmd.CommandText = "CREATE TABLE 刀具預估數量 ([序號] INTEGER, [刀號] VarChar,[刀具規格] VarChar,[1月] VarChar,[2月] VarChar,[3月] VarChar,[4月] VarChar,[5月] VarChar,[6月] VarChar,[7月] VarChar,[8月] VarChar,[9月] VarChar,[10月] VarChar,[11月] VarChar,[12月] VarChar)";
cmd.ExecuteNonQuery();

或者這樣寫也行 :

OleDbCommand cmd = new OleDbCommand();
string sheetName1 = "刀具預估數量";
if (tableName.Contains(sheetName1))
{
    string sqlDelete = @"DROP TABLE " + sheetName1 + ";";
    cmd = new OleDbCommand(sqlDelete, myCon);
    cmd.ExecuteNonQuery();// 執行建立sheet的語句
}
string sqlCreate = @"CREATE TABLE " + sheetName1 + @" ([序號] INTEGER)";
cmd = new OleDbCommand(sqlCreate, myCon);
cmd.ExecuteNonQuery();

 這個建立的新表只有表頭而已,還沒有任何的資料,不過我們可以通過獲取這個表單的列數就可以知道我們是否建立成功了

string sheet4 = "select*from[刀具預估數量$]";//定義Excel工作表單
OleDbDataAdapter Command4 = new OleDbDataAdapter(sheet4, myCon);//從工作表中查詢資料
DataSet sheetdata4 = new DataSet(); //建立資料集物件
Command4.Fill(sheetdata4, "刀具預估數量");//填充資料集 

int sheet4Columns = sheetdata4.Tables[0].Columns.Count; // 獲取表的列數
int sheet4Rows = sheetdata4.Tables[0].Rows.Count; // 獲取表的行數

Console.WriteLine(sheet4Rows);
Console.WriteLine(sheet4Columns);

下面是完整的程式碼: 

        public string ExcelName = @"C:\Users\敏\Desktop\test.xlsx";
        public void getExcel()
        {
            string strConn = "";
            List<string> tableName = new List<string>();
            if (File.Exists(ExcelName))//判斷檔案是否存在
            {
                FileInfo file = new FileInfo(ExcelName);//讀取excel檔名
                string fileType = file.Extension;//提取excel檔名字尾,判斷檔名型別
                //----------------------------獲取Excel表格資料---------------------------
                if (fileType == ".xls")
                    //讀取“.xls”時使用"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelPath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'" Office 07及以上版本 不能出現多餘的空格 而且分號注意
                    strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" + ExcelName + @";Extended Properties='Excel 8.0;HDR=Yes;IMEX=0'";
                else
                    //讀取“.xlsx”時使用 "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ExcelPath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'"Office 07以下版本 
                    strConn = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" + ExcelName + @";Extended Properties='Excel 8.0;HDR=Yes;IMEX=0'";
            }

            OleDbConnection myCon = new OleDbConnection(strConn);     //連線資料庫    
            myCon.Open();//開啟資料庫
            DataTable dt = myCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //獲取所有sheet的工作表
            foreach (DataRow row in dt.Rows)
            {
                string SheetTableName = row["TABLE_NAME"].ToString();
                if (SheetTableName.Contains("$") && SheetTableName.Replace("'", "").EndsWith("$"))  //過濾無效SheetName  
                {
                    SheetTableName = SheetTableName.Replace("'", "");
                    SheetTableName = SheetTableName.Substring(0, SheetTableName.Length - 1);
                    tableName.Add(SheetTableName);
                }
            }
            foreach (string sheet in tableName) //迴圈所有的sheet
            {
                Console.WriteLine(sheet);
            }
            OleDbCommand cmd = myCon.CreateCommand();//建立工作表命令
            string sheetName = "刀具預估數量";
            if (tableName.Contains(sheetName))
            {
                cmd.CommandText = "DROP TABLE 刀具預估數量";
                cmd.ExecuteNonQuery();// 執行建立sheet的語句
            }
            cmd.CommandText = "CREATE TABLE 刀具預估數量 ([序號] INTEGER, [刀號] VarChar,[刀具規格] VarChar,[1月] VarChar,[2月] VarChar,[3月] VarChar,[4月] VarChar,[5月] VarChar,[6月] VarChar,[7月] VarChar,[8月] VarChar,[9月] VarChar,[10月] VarChar,[11月] VarChar,[12月] VarChar)";
            cmd.ExecuteNonQuery();

            string sheet1 = "select*from[客戶排配計劃$]";//定義Excel工作表單
            OleDbDataAdapter Command1 = new OleDbDataAdapter(sheet1, myCon);//從工作表中查詢資料
            DataSet sheetdata1 = new DataSet(); //建立資料集物件
            Command1.Fill(sheetdata1, "客戶排配計劃");//填充資料集 

            string sheet2 = "select*from[刀具壽命$]";//定義Excel工作表單
            OleDbDataAdapter Command2 = new OleDbDataAdapter(sheet2, myCon);//從工作表中查詢資料
            DataSet sheetdata2 = new DataSet(); //建立資料集物件
            Command2.Fill(sheetdata2, "刀具壽命");//填充資料集 

            string sheet3 = "select*from[下折方案$]";//定義Excel工作表單
            OleDbDataAdapter Command3 = new OleDbDataAdapter(sheet3, myCon);//從工作表中查詢資料
            DataSet sheetdata3 = new DataSet(); //建立資料集物件
            Command3.Fill(sheetdata3, "刀具壽命");//填充資料集 

            string sheet4 = "select*from[刀具預估數量$]";//定義Excel工作表單
            OleDbDataAdapter Command4 = new OleDbDataAdapter(sheet4, myCon);//從工作表中查詢資料
            DataSet sheetdata4 = new DataSet(); //建立資料集物件
            Command4.Fill(sheetdata4, "刀具預估數量");//填充資料集 


            int sheet1Columns = sheetdata1.Tables[0].Columns.Count; // 獲取表的列數
            int sheet1Rows = sheetdata1.Tables[0].Rows.Count; // 獲取表的行數
            int sheet2Columns = sheetdata2.Tables[0].Columns.Count; // 獲取表的列數
            int sheet2Rows = sheetdata2.Tables[0].Rows.Count; // 獲取表的行數
            int sheet3Columns = sheetdata3.Tables[0].Columns.Count; // 獲取表的列數
            int sheet3Rows = sheetdata3.Tables[0].Rows.Count; // 獲取表的行數
            int sheet4Columns = sheetdata4.Tables[0].Columns.Count; // 獲取表的列數
            int sheet4Rows = sheetdata4.Tables[0].Rows.Count; // 獲取表的行數

            Console.WriteLine(sheet1Rows);   //輸出測試
            Console.WriteLine(sheet1Columns);
            Console.WriteLine(sheet2Columns);
            Console.WriteLine(sheet2Rows);
            Console.WriteLine(sheet3Columns);
            Console.WriteLine(sheet3Rows);
            Console.WriteLine(sheet4Rows);
            Console.WriteLine(sheet4Columns);