<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 獲取 sheet 名字 可看“項目管理臺賬.sln”的“登錄窗口”,或者看“連接測試”,代碼在里面的“sheet 表名”窗口。 SqlClient.SqlConnection沒有相關的功能,所以要用 OleDbConnection。 [https://www.cnblogs.com/coolsundy/p/4056813.html](https://www.cnblogs.com/coolsundy/p/4056813.html) [https://www.cnblogs.com/CharlesGrant/p/3650864.html](https://www.cnblogs.com/CharlesGrant/p/3650864.html) 可以理解為:兩個都是 c#中用于獲取外部數據的類,但 sql 是獲取 sqlserver 數據庫使用,而 OleDb 可以認為是獲取與 Microsoft 有關的比如 excel、access 數據庫時候用的。 與 sql 一樣,ole 也要寫查詢語句。sql 查詢語句比如是“select \* from dbo.總工辦數據庫”,那么 ole 語句可能是“select \* from [sheet1$]”。這里跟的是表名。 ## 做法 1 如果要求大家在導入數據的時候直接把 excel 表格另存,然后 sheet 名就直接叫 sheet1 的話,那上面的語句沒問題。 但有時候大家的表往往不一定是sheet1名字,所以可以用 oleConnection 來判斷,獲取 sheet 的名字。 ## 做法 2 用以下“做法 2 具體”中提到的辦法獲取 sheet 各個表的名字。sheet的名字其實是按“正序”排列的,然后默認讀取第一行的表。 1. 當sheet命名成“你好” 以及“玉米” 的時候,第一行顯示的表名 是“你好”; ![](https://img.kancloud.cn/e1/8b/e18b8f33cd20e8912d2ce983862057f0_421x193.png) 2. 當sheet命名成“1玉米” 以及“2你好”的時候,順序就不一樣了。 ![](https://img.kancloud.cn/61/c9/61c980f989f4d99ecfe5e99040ad54eb_486x258.png) ## 做法 3 獲取當前 active 的表格(未完成) ## 做法 2具體:在不考慮 sheet 被重命名的情況下 ![](https://tva1.sinaimg.cn/large/006y8mN6gy1g7fd5ptvwcj31q10u044p.jpg) > 基本邏輯: > 1. 把 excel 當成一個數據庫,那么每個 sheet 就是一個表; > 2. 用 OleDbConnection.GetOleSchema()方法來獲取每個 sheet 的屬性;括號中,第一個元素要用 OleDbSchemaGuide來實現; > - 此時創建的是OleDbConnection對象 oleconn; > 3. 獲取的屬性實際上是一個數組,則用 DataTable (比如命名為 dt)來存放; > 關鍵的代碼只有這一句: `DataTable dt = oleconn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null) ` > 4. 遍歷 dt,一般獲取第一行第一列的值,這個值就是我們要找的 sheet 名了;(此部分本次未寫,知道了 dt 結構以后,就可以方便寫出來。)datagridview控件用的 是datagridview1.Rows[0].Cells[2]或者Cells["密碼"] > ![](https://img.kancloud.cn/e4/e6/e4e69fcabf97a8df9fce1ac8ba032747_813x232.png) > [http://www.hmoore.net/amy326/c/798326](http://www.hmoore.net/amy326/c/798326) > 5. 返回這個值。 完整代碼如下: ``` public class pb\_公共類 { //主要目的是為了獲得表名,但由于ole的連接字符比較復雜,所以單獨出來寫 //1獲取ole連接字符connString public String GetExcelConn() { string connString = ""; OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); ofd.Filter = "Excel(\*.xls)|\*.xls|Excel(\*.xlsx)|\*.xlsx"; var path = ofd.FileName; string filesuffix = Path.GetExtension(path); if(string.IsNullOrEmpty(filesuffix)) { return null ; } else if(filesuffix == ".xls") { return connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + path + ";" + ";Extended Properties=\\"Excel 8.0;HDR=YES;IMEX=1\\""; } else { return connString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + path + ";" + ";Extended Properties=\\"Excel 12.0;HDR=YES;IMEX=1\\""; } } public DataTable GetTableName() { string connString = GetExcelConn(); // 直接用上面第一步獲得的返回值來用,變量名也可以是其他的abc之類的,無所謂 OleDbConnection oleconn = new OleDbConnection(connString); oleconn.Open(); DataTable dt = oleconn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);//只要這一句就可以了! oleconn.Close(); return dt; } ``` ![](https://img.kancloud.cn/6c/26/6c26215d663c5d1c50c843b9124ddbcf_1128x446.png) ![](https://img.kancloud.cn/a8/b1/a8b18d7f3e98ade7887d88160dcb9eb1_798x269.png) 最后在用一個dataGridView控件顯示即可。 ![](https://img.kancloud.cn/5a/7e/5a7ecc8832d103d564680bd4523d0e8f_654x443.png) # 但 excel 里面 sheet 的名字,跟它的編號其實不是同一個 就像 textbox 有“name”和“text”兩個屬性一樣。一個是這個東西本身系統生成時候的名字,一個是我們讓它顯示在前端時候我們給它命名的名字 比如:打開 excel VBA。用戶已經給 sheet隨意命名了。但在 vba 里面可以看到,即使用戶命名的叫“sheet2”,但 excel 中系統標注的這個表的代號仍然實際是 sheet1。 > **所以在c#中使用的時候要注意,不要因此引起運行結果的錯亂。** ![](https://img.kancloud.cn/d4/ca/d4cad9e52b8e9221b6f6b5521bf1c8f9_559x469.png) # 表名顯示錯誤 https://blog.csdn.net/hbxtlhx/article/details/8511731 如下圖:明明excel里面只有一個表,但是用工具弄出來以后變成有好幾個表。還有一個隱藏的“'2019年貴州項目A4費用表'$_FilterDatabase”。 ![](https://img.kancloud.cn/82/8a/828a801342704360d9a7b986e79174ed_804x197.png) ![](https://img.kancloud.cn/dc/96/dc963fad1fa33ed9a5c97e897d08da95_274x82.png) ## 打開Excel - 公式 - 名稱管理器 并未看到任何記錄。所以有可能這個表格被隱藏了。 ![](https://img.kancloud.cn/4a/5a/4a5ad4c6bb17bdbd9d30245e1c9b2e24_543x162.png) VBA中新建模塊輸入以下代碼,并運行 ``` Sub ShowAllNames() For Each n In ThisWorkbook.Names n.Visible = True Next End Sub ``` 再打開公式-名稱管理器,則可以看到隱藏的這個表格。 如果沒必要,可以刪除。 ![](https://img.kancloud.cn/c1/b1/c1b1036b3ed462f62ba8f92828e81bcc_538x438.png) 刪除完再運行,就都正常了。 ![](https://img.kancloud.cn/62/3b/623b3d212566a339d0d02d35a8ff0d1f_789x181.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看