none
Datagridview讀取excel編輯後再匯出辦法 RRS feed

  • 一般討論

  • 先要感謝這邊的前輩願意指導小弟,讓小弟在初次碰寫程式的路上不會亂撞

    前幾次經由多位前輩的指導終於學會了匯入Excel(對小弟的幫助真的很大,真的很感謝大家)

    這次小弟想先試試看自己學學看在Datagridview匯入的Excel內容新增或更改後再匯出,於是有找到:

    https://support.microsoft.com/zh-tw/kb/316934#bookmark-8

    INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')

    UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111'

    其中這兩段是新增和儲存的方法嗎?為什麼我失敗了=..=

    有把它寫到button1的Click事件裡呀,對不起各位前輩,是否能為小弟看看是否又做了甚麼錯誤的事

    附上小弟的程式碼:

            private void button1_Click(object sender, EventArgs e)
            {
                 INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                //開啟Excel檔案
                string ExcelPath = System.Windows.Forms.Application.StartupPath + @"\testexcel.xls";
                string OpenExcelData = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelPath + ";Extended Properties ='Excel 8.0;HDR=Yes;IMEX=2;ReadOnly=0'";
                string OutputSheet = "Select * From [Sheet1$]";//表格名稱=要填入Excel上Sheet的名稱

                OleDbConnection ExcelConnection = new OleDbConnection(OpenExcelData);

                try
                {
                    ExcelConnection.Open();//打開檔案連結

                    //讀取output
                    OleDbCommand ExCommendOut = new OleDbCommand(OutputSheet, ExcelConnection);
                    OleDbDataAdapter dataAdapterOut = new OleDbDataAdapter(ExCommendOut);
                    DataTable dTableOut = new DataTable();
                    dataAdapterOut.Fill(dTableOut);
                    dataGridView1.DataSource = dTableOut;

                    //自動調整DataGridView欄寬
                    dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
                    dTableOut.Dispose();
                    dataAdapterOut.Dispose();

                    //關閉檔案連結,釋放記憶體,若不關閉則系統會占用資源,匯入成功時一定要關閉
                    ExCommendOut.Dispose();
                    ExcelConnection.Close();
                    ExcelConnection.Dispose();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("檔案讀取失敗!\n" + ex.Message, "資料處理錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                finally
                {
                    if (ExcelConnection != null)
                        ExcelConnection.Close();
                }
            }
        }
    }

    2016年4月30日 下午 12:58

所有回覆

  • 這連編譯都不會過的吧 ?

    你應該把那個塞進 OleDbcommand 然後呼叫 ExecuteNonQuery 的吧 .
    (文章上有寫 : 直接執行命令,以便一次插入或更新一筆記錄。如果要執行這項操作,您可以在連線上建立 OLEDbCommand 物件,並將 CommandText 屬性設定為插入記錄的有效命令 ), 文章內容要看完整, 不是看到好像是程式碼就直接貼上去...

    在你之前的討論 SQL Server移動後讀取不到,求解

    我有貼上 ADO.NET 的文件連結, 你應該好好看看裡面的內容. 不是查到一段拼湊一段.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2016年4月30日 下午 01:37
    版主
  • 這連編譯都不會過的吧 ?

    你應該把那個塞進 OleDbcommand 然後呼叫 ExecuteNonQuery 的吧 .
    (文章上有寫 : 直接執行命令,以便一次插入或更新一筆記錄。如果要執行這項操作,您可以在連線上建立 OLEDbCommand 物件,並將 CommandText 屬性設定為插入記錄的有效命令 ), 文章內容要看完整, 不是看到好像是程式碼就直接貼上去...

    我有貼上 ADO.NET 的文件連結, 你應該好好看看裡面的內容. 不是查到一段拼湊一段.

    您好Bill前輩,我現在匯入了OLEDbCommand元件準備編輯CommandText 屬性,卻出現:

    找不到供命令使用的作用中連結,請設定作用中的連結,然後設定命令文字

    所以我又去設定Connection屬性,要新增資料來源時卡住了,Excel檔算是資料來源嗎?(選不到)

    還是要加上Dataset元件,這要怎麼用?煩請前輩不吝賜教:))

    2016年5月2日 上午 04:24
  • 附上小弟的程式碼:

            private void button1_Click(object sender, EventArgs e)
            {
                 INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')
            }

     

    C# 無法直接執行 SQL 語法,必須透過 Odbc / Oledb ,所以你這段連編譯都不會過,前面網友點過你。

    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2016年5月2日 下午 03:29