none
想請教一個C#2005 讀入EXCEL 2003的問題 RRS feed

  • 問題

  • 首先講一下我的動作

    先加入參考 指向是

    C:\Program Files\Microsoft Office\OFFICE11\Excel.exe

    (這點我覺得有點奇怪 怎麼會是EXE呢??)

    CODE如下

     private void button2_Click(object sender, EventArgs e)
            {

              
                //Excel.Application ExcelObj = new Excel.Application();
                Excel.Application ExcelObj = new Excel.Application();

     

                ExcelObj.Visible = true;


                if (ExcelObj == null)
                {
                    MessageBox.Show("EXCEL無法呼叫 請確認已安裝EXCEL");
                    System.Windows.Forms.Application.Exit();
                }

    //此為實體檔位置           

    string excelFilePath = textBox1.Text;


                Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open(excelFilePath, null, null, null, null, null, null, null, null, null, null, null, null, null, null);
                //取得EXCEL的SHEET集合
                Excel.Sheets sheets = theWorkbook.Worksheets;

                // get the first and only worksheet from the collection of worksheets
                Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);

                // loop through 10 rows of the spreadsheet and place each row in the list view
                for (int i = 1; i <= 10; i++)
                {
                    Excel.Range range = worksheet.get_Range("A" + i.ToString(), "J" + i.ToString());
                    System.Array myvalues = (System.Array)range.Cells.Value2;
                    string[] strArray = ConvertToStringArray(myvalues);
                    listView1.Items.Add(new ListViewItem(strArray));
                }

     

                exc.Application.Workbooks.Open(textBox1.Text);
                object oMissing = System.Reflection.Missing.Value;

                exc.Application.Workbooks.Open(textBox1.Text, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);

                myExcel.Application.Workbooks.Open(excelFilePath, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);


                Workbook workbooks = exc.Workbooks;


                for (int i = 0; i < totalName.Count; i++)
                {
                    sheetNameIdea = totalNameIdea.ToString().Trim();
                }  

     

     

            }

     

    BUILT之後 一切都是正常

    也過了

     

    但是真的執行時 確一直出現

    發生例外狀況於HRESULT0x800A03EC

    掛在

    Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open(excelFilePath, null, null, null, null, null, null, null, null, null, null, null, null, null, null);

    也上網去找了一些可能的解法

    但是都沒有用辦法解決問題

     

    還有 有找到類似

    Visual Studio Tools for Office 

    這樣的文章 用這東西開發會有幫助嗎??

     不知道有沒有大大可以解惑一下

    感謝感謝

    2006年11月27日 上午 07:18

解答

  • 1. Excel 的物件模型放在 Excel.exe,這不必懷疑,但如果你是用 Excel XP 以上版本,你應該要引用的是 Primary Interop Assmblies,而不是直接去參考主程式 .

    Office 2003 Primary Interop Assemblies 可以在 Microsoft Download Center 中找到 .

    2. 如果你要在物件模型中的 "選擇性參數" 套用空值的話,不要用 null,改用 Type.Missing.

    2006年11月27日 上午 07:26
    版主
  • 感謝各位大大的分享

    後來 終於找到方法

    一樣要ADD REFERENCE  指向那隻EXCEL.EXE

    重點是  在開頭using 要寫成

    using Excel = Microsoft.Office.Interop.Excel;

    如此一來  就可用了

    Excel.Application mExcelObj = new Excel.Application();

    Excel.Workbook theWorkbook = mExcelObj.Workbooks.Open(excelfilepath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

     

    寫在這裡跟大家分享一下

    2006年12月25日 下午 03:17

所有回覆

  • 1. Excel 的物件模型放在 Excel.exe,這不必懷疑,但如果你是用 Excel XP 以上版本,你應該要引用的是 Primary Interop Assmblies,而不是直接去參考主程式 .

    Office 2003 Primary Interop Assemblies 可以在 Microsoft Download Center 中找到 .

    2. 如果你要在物件模型中的 "選擇性參數" 套用空值的話,不要用 null,改用 Type.Missing.

    2006年11月27日 上午 07:26
    版主
  • 謝謝您的回答

    我下載了OFFICE2003PIA 也安裝了

    也在WINDOWS/assembly 看到EXCEL有註冊了

    (參考了以下文章)

    http://www.microsoft.com/china/msdn/library/office/office/OfficePrIntopAssFAQ.mspx?mfr=true

    但是 我真的不太懂裡面講的

    那我要ADD REFERENCE要加入哪一個

    我好像也只能找到EXCEL.EXE耶

    真的是不太懂

    想在向您請教一下...THANKS!!

    2006年11月27日 上午 10:47
  • 有繁體中文的不看,跑去看簡體中文 ...
    http://msdn2.microsoft.com/zh-tw/library/dww0e04a(VS.80).aspx

    你在 COM 加入 Excel Object Model 的參考時,它就會自動對應到所選的應用程式的 Primary Interop Assembly 了 .

    2006年11月27日 上午 11:01
    版主
  • 感謝各位大大的分享

    後來 終於找到方法

    一樣要ADD REFERENCE  指向那隻EXCEL.EXE

    重點是  在開頭using 要寫成

    using Excel = Microsoft.Office.Interop.Excel;

    如此一來  就可用了

    Excel.Application mExcelObj = new Excel.Application();

    Excel.Workbook theWorkbook = mExcelObj.Workbooks.Open(excelfilepath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

     

    寫在這裡跟大家分享一下

    2006年12月25日 下午 03:17
  • 大大們好,

    我是按著錯誤訊息找到這來的.可是我的錯誤,非上述之原因所造成.

    供大家參考.

    如果cell的索引值超出範圍也會出現該錯誤訊息.

    ^^

     

     

    2008年9月2日 上午 09:03