none
請問我是使用NPOI,但是使用CellValue時不能定義 RRS feed

  • 問題

  • 請問下面問題要怎麼解... 我是超超超新手

    錯誤    1    'NPOI.HSSF.Extractor.ExcelExtractor' 不包含 'CellValue' 的定義,也找不到擴充方法 'CellValue' 來接受型別 'NPOI.HSSF.Extractor.ExcelExtractor' 的第一個引數 (您是否遺漏 using 指示詞或組件參考?)    c:\users\waite_lee\documents\visual studio 2010\Projects\讀excel資料\讀excel資料\Form1.cs    57    34    讀excel資料

    參考有加上Ionic.Zip,NPOI,跟加入HSSFTestDataSamples.cs

    程式碼如下             

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using NPOI.HSSF.UserModel;
    using NPOI.HSSF.Extractor;
    using TestCases.HSSF;

    ......略........

     private string readXls(string fileName, int sheetNum, int rowNum, int colNum)
            {
                try
                {
                    HSSFWorkbook workbook = HSSFTestDataSamples.OpenSampleWorkbook(fileName);
                    ExcelExtractor extractor = new ExcelExtractor(workbook);
                    return extractor.CellValue(sheetNum, rowNum, colNum);
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("Error!\n请检查此文件是否已被打开或被其他应用程序占用!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return "";
                }
            }

    請問我是少加到什麼參考嗎?

     

    2012年1月11日 上午 08:58

解答

  • 我找到了

    你這行

    string last_sub_file_name = Full_file_name.Substring(Full_file_length - 3, 3).ToUpper();

    這樣會取 檔案的最後三個字:  LSX

    但是底下判斷副檔名是四個字 : XLSX

    當然不行


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度


    • 已編輯 Alex_Lee 2012年2月7日 上午 09:38
    • 已標示為解答 小義 2012年2月7日 上午 10:17
    2012年2月7日 上午 09:37
  • 你有定義兩個 Con_str 你知道嗎?

    一個是class member 值是String.Empty

    另一個是GetTableSheetName()中的local 變數 值是 "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Full_file_name + ";Extended Properties='Excel 12.0;HDR=YES'";

    而你在LoadData()中的Con_str 會用的是 class member

    解決方式是 把 GetTableSheetName()中的 string Con_str  = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Full_file_name + ";Extended Properties='Excel 12.0;HDR=YES'"; 

    改成 

    Con_str  = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Full_file_name + ";Extended Properties='Excel 12.0;HDR=YES'"; 

    就好了


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已標示為解答 小義 2012年2月15日 上午 05:28
    2012年2月8日 下午 06:30

所有回覆

  • ExcelExtractor並沒有CellValue的Method吧!

    如果您要取Cell的資料,可以試試
    NPOI.HSSF.Util.HSSFCellUtil 的 GetCell Method

    http://www.java2s.com/Open-Source/CSharp/Office/npoi/NPOI/HSSF/Util/HSSFCellUtil.cs.htm

     


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    • 已編輯 亂馬客 2012年1月11日 上午 09:21
    2012年1月11日 上午 09:14
  • 您好

    我用 NPOI 1.2.4 測試一下,ExcelExtractor 沒有 CellValue

    請問您的程式碼是從 NOPI 參考的嗎? 假如不是的話,建議您到 NOPI 網站下載 NPOI 1.2.4 examples 範例學習

    http://npoi.codeplex.com/releases


    歡迎參觀我的Blog.NET菜鳥自救會

    2012年1月11日 上午 09:18
    版主
  • 嗯。我有試過,沒有CellValue,想說是不是我少了什麼?

    我是參考下面這一個網的資料

    http://hi.baidu.com/tomlei08/blog/item/399b77fc9a005059d6887d13.html

    他是使用 return extractor.CellValue(sheetNum, rowNum, colNum);

    如果沒有的話,這一段應該是要什麼才是正確的呢?

     

    2012年1月11日 上午 09:21
  • 請參考

    c#读取excel with NPOI


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2012年1月11日 上午 09:24
  • 先看看

    NPOI教程: http://tonyqus.sinaapp.com/

    在 Server 端存取 Excel 檔案的利器:NPOI Library : http://msdn.microsoft.com/zh-tw/ee818993.aspx


    歡迎參觀我的Blog.NET菜鳥自救會
    2012年1月11日 上午 09:32
    版主
  • 真的不好意思,因為我沒c#的底,是臨時抱佛的(老闆要求)所以上面這個看的不是很懂

    貼上Visual studio後好像少很多東西,所以沒辦法

    謝謝哦

    2012年1月11日 上午 09:37
  • 先看看

    NPOI教程: http://tonyqus.sinaapp.com/

    在 Server 端存取 Excel 檔案的利器:NPOI Library : http://msdn.microsoft.com/zh-tw/ee818993.aspx


    歡迎參觀我的Blog.NET菜鳥自救會

    謝謝,我有去看在" Server 端存取 Excel 檔案的利器:NPOI Library"輸入的部份

    也有把他貼到Visual studio,不過出現下面的問題

    錯誤    1    '讀excel資料.Form1' 不包含 'fuUpload' 的定義,也找不到擴充方法 'fuUpload' 來接受型別 '讀excel資料.Form1' 的第一個引數 (您是否遺漏 using 指示詞或組件參考?)    C:\Users\waite_lee\Documents\Visual Studio 2010\Projects\讀excel資料\讀excel資料\test.cs    37    22    讀excel資料

    錯誤    3    型別 'NPOI.SS.UserModel.ISheet' 不能隱含轉換為 'NPOI.HSSF.UserModel.HSSFSheet'。已有明確轉換存在 (您是否漏掉了轉型?)    C:\Users\waite_lee\Documents\Visual Studio 2010\Projects\讀excel資料\讀excel資料\test.cs    40    35    讀excel資料

    錯誤    4    型別 'NPOI.SS.UserModel.IRow' 不能隱含轉換為 'NPOI.HSSF.UserModel.HSSFRow'。已有明確轉換存在 (您是否漏掉了轉型?)    C:\Users\waite_lee\Documents\Visual Studio 2010\Projects\讀excel資料\讀excel資料\test.cs    44    37    讀excel資料

    錯誤    6    '讀excel資料.Form1' 不包含 'gvExcel' 的定義,也找不到擴充方法 'gvExcel' 來接受型別 '讀excel資料.Form1' 的第一個引數 (您是否遺漏 using 指示詞或組件參考?)    C:\Users\waite_lee\Documents\Visual Studio 2010\Projects\讀excel資料\讀excel資料\test.cs    72    22    讀excel資料

    我是少using什麼了嗎?

     

    2012年1月11日 上午 09:58
  • 小弟寫了支很簡單的Sample Code(Console專案)

    您再拿去研究改改看吧

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    /*開始引用*/
    using NPOI.HSSF.UserModel;
    using System.IO;
    using NPOI.SS.UserModel;
    
    namespace ConsoleExcel
    {
        class Program
        {
            static void Main(string[] args)
            {
                //要開啟的Excel檔
                FileStream fs = new FileStream("Sample.xls", FileMode.Open);
                HSSFWorkbook workbook = new HSSFWorkbook(fs);
    
                HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(0);//取得第0個Sheet  
                for (int i = sheet.FirstRowNum; i <= sheet.LastRowNum; i++)/*一列一列地讀取資料*/
                {
    
                    HSSFRow row = (HSSFRow)sheet.GetRow(i);//取得目前的資料列  
    
    
                    for (int j = row.FirstCellNum; j <= row.LastCellNum - 1; j++)//走訪有資料的行
                    {
                        string result = string.Empty;
                        if (row.GetCell(j).CellType == CellType.FORMULA)//如果Cell是公式
                        {
                            result = Convert.ToString(row.GetCell(j).NumericCellValue);
                        }
                        else
                        {
                            result = row.GetCell(j).ToString();
                        }
    
                        Console.Write(result + ",");//顯示該Cell 的值
    
    
                    }
    
                    Console.WriteLine();//單純顯示換行
    
                }
    
    
    
                fs.Close();
                Console.ReadKey();
            }
        }
    }
    
    

     

    Download載點
    2012年1月11日 上午 10:45
  • 你覺得 Web 的東西可以套在 Windows Forms 上嗎...

    況且範例程式是給你參考模仿的,不是給你剪貼的。

    不過 NPOI v1.2.4 在物件有些變化,該文章可能有些程式會無法相容。


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure
    2012年1月11日 下午 02:38
    版主
  • 你覺得 Web 的東西可以套在 Windows Forms 上嗎...

    況且範例程式是給你參考模仿的,不是給你剪貼的。

    不過 NPOI v1.2.4 在物件有些變化,該文章可能有些程式會無法相容。


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    不好意思,先說我沒基本底子

    所以Web 的東西可以套在 Windows Forms 上嗎,我不是很了解

    不過你會這樣問就是不行套用啦XD

    我知道應該要有先一些的基本認識

    不過這次是因為老闆要求,在不得不的情況才接下來

    所以上網找資料,希望有比較類似的範例

    會剪貼是因為想知道跟我想的差在那裡

    也謝謝指導^^

    之後也會開始學習C#


    • 已編輯 小義 2012年1月18日 上午 02:24
    2012年1月18日 上午 02:22
  • 小弟寫了支很簡單的Sample Code(Console專案)

    您再拿去研究改改看吧

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    /*開始引用*/
    using NPOI.HSSF.UserModel;
    using System.IO;
    using NPOI.SS.UserModel;
    
    namespace ConsoleExcel
    {
        class Program
        {
            static void Main(string[] args)
            {
                //要開啟的Excel檔
                FileStream fs = new FileStream("Sample.xls", FileMode.Open);
                HSSFWorkbook workbook = new HSSFWorkbook(fs);
    
                HSSFSheet sheet = (HSSFSheet)workbook.GetSheetAt(0);//取得第0個Sheet  
                for (int i = sheet.FirstRowNum; i <= sheet.LastRowNum; i++)/*一列一列地讀取資料*/
                {
    
                    HSSFRow row = (HSSFRow)sheet.GetRow(i);//取得目前的資料列  
    
    
                    for (int j = row.FirstCellNum; j <= row.LastCellNum - 1; j++)//走訪有資料的行
                    {
                        string result = string.Empty;
                        if (row.GetCell(j).CellType == CellType.FORMULA)//如果Cell是公式
                        {
                            result = Convert.ToString(row.GetCell(j).NumericCellValue);
                        }
                        else
                        {
                            result = row.GetCell(j).ToString();
                        }
    
                        Console.Write(result + ",");//顯示該Cell 的值
    
    
                    }
    
                    Console.WriteLine();//單純顯示換行
    
                }
    
    
    
                fs.Close();
                Console.ReadKey();
            }
        }
    }
    
    

     

    Download載點
    謝謝,我會試試
    2012年1月18日 上午 02:22
  • 您好,以下有針對NPOI 1.2.3版的教學,您可以參考一下哦,謝謝!
    NPOI 1.2.3教程
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2012年1月18日 上午 03:04
  • Hi 請問你的問題解決了嗎 ?
    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2012年1月24日 下午 07:37
    版主
  • 不好意思。還沒解出來,用npoi來讀excel,不知怎麼讀入dataGridView
    2012年2月7日 上午 12:55
  • DataGridView 有個 DataSource 屬性可以用, 用法請參閱 MSDN 文件庫 [DataGridView.DataSource 屬性 ].

    它的來源可以是個 DataTable 類別的物件, 參考一下黑暗大的 [筆記-Excel轉DataTable的NPOI簡單範例]


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

    2012年2月7日 上午 01:53
    版主
  • 你可以再透過 OleDb把Excel的資料再Assign給GridView的DataSource哦!
    透過 OleDb 精準讀入 Excel 檔的方法

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年2月7日 上午 01:59
  • 你可以再透過 OleDb把Excel的資料再Assign給GridView的DataSource哦!
    透過 OleDb 精準讀入 Excel 檔的方法

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    一開始我也是用OleDb來試,不過不知為什麼excel2010的就是試不出來,所以看到可以用NPOI說比較方便,所以想試試NPOI的方式

    謝謝

    2012年2月7日 上午 04:12
  • 如果是Excele 2010 連線字串要修改
    範例:
    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=yourExcelFile;Extended Properties="Excel 12.0;HDR=YES";



    • 已編輯 Alex_Lee 2012年2月7日 上午 05:14
    2012年2月7日 上午 05:12
  • 如果是Excele 2010 連線字串要修改
    範例:
    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=yourExcelFile;Extended Properties="Excel 12.0;HDR=YES";



    我有試過這一個,不過不知為什麼不行,所以先放著,試npoi的看看,謝謝

    2012年2月7日 上午 05:35
  • 您要的只是要從Excel讀檔(.xls or .xlsx?),然後放到DataTable之中!? 那應該不需要透過NPOI吧!
    請您參考一下 http://www.connectionstrings.com/excel-2007
    您所說的不行指的是什麼意思呢? 您有Check Excel的SheetName對吧!

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年2月7日 上午 06:05
  • 您要的只是要從Excel讀檔(.xls or .xlsx?),然後放到DataTable之中!? 那應該不需要透過NPOI吧!
    請您參考一下 http://www.connectionstrings.com/excel-2007
    您所說的不行指的是什麼意思呢? 您有Check Excel的SheetName對吧!

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    是這樣,因有網友給我範本,我有用,excel 2003的沒問題,也就是xls的檔就沒問題,在"請選擇 sheet 分頁"這欄會出現可選的分頁,不過把xls改為xlsx跟把2003的Provider改為如Alex Lee大所說的Provider=Microsoft.ACE.OLEDB.12.0;Data Source=yourExcelFile;Extended Properties="Excel 12.0;HDR=YES";

    執行時選檔案沒問題,可是選完就是不會出現可選的分頁,不知原因

    程式如下,還請幫忙看一下,謝謝

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb;
    using System.IO;
    using System.Data.SqlClient;

    namespace FMES_EZ_Excel
    {
        public partial class Form1 : Form
        {
            //檔名
            private string Full_file_name = string.Empty;
            private string Con_Str = string.Empty;
            private OleDbConnection con;
            private OleDbCommandBuilder ocb;
            private OleDbDataAdapter odp;
            private DataTable dt;

            public Form1()
            {
                InitializeComponent();
                this.Text = Application.ProductName + " " + Application.ProductVersion;
            }
            //選擇 excel 檔案
            private void btn_OpenExcel_Click(object sender, EventArgs e)
            {
                cmb_sheet_name.Items.Clear();
                OpenFileDialog f_Open_file = new OpenFileDialog();
                f_Open_file.Filter = "xlsx files (*.xlsx)|*.xlsx|All files (*.*)|*.*"; //只选取xlsx文件
                f_Open_file.ShowDialog();
                Full_file_name = f_Open_file.FileName.ToString();

                //防呆 檔案是否存在
                if (System.IO.File.Exists(Full_file_name) == false)
                {
                    dataGridView1.DataSource = null;
                    return;
                }

                //防呆 副檔名 必須為 xlsx
                int Full_file_length = Full_file_name.Length;
                string last_sub_file_name = Full_file_name.Substring(Full_file_length - 3, 3).ToUpper();
                if (last_sub_file_name != "XLSX")
                {
                    return;
                }
                //取得 sheet Name
                GetTableSheetName();
            }
            private void GetTableSheetName()
            {
                if (Full_file_name.Length == 0)
                {
                    btn_Query.Enabled = false;
                    return;
                }

               Con_Str ="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Full_file_name + ";Extended Properties=Excel 12.0;HDR=YES";

                //先取回 sheet 名稱
                try
                {
                    OleDbConnection con = new OleDbConnection(Con_Str);
                    con.Open();
                    DataTable dss = new DataTable();
                    dss = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    cmb_sheet_name.Items.Add("請選擇 sheet 分頁...");
                    for (int i = 0; i < dss.Rows.Count; i++)
                    {
                        cmb_sheet_name.Items.Add(dss.Rows[i].ItemArray[2].ToString().Trim().Replace("'", ""));
                    }
                    con.Close();
                    cmb_sheet_name.SelectedIndex = 0;
                }
                catch (Exception ex)
                {
                    String aa = ex.GetBaseException().ToString();
                    btn_Query.Enabled = false;
                    MessageBox.Show(aa);
                }

              
    • 已編輯 小義 2012年2月7日 上午 07:50 沒改到
    2012年2月7日 上午 07:07
  • 其實我找了很多資料,感覺NPOI好像輸出都是html檔??

    其實我的目地是,有多個xlsx檔(每天一個),每個檔都會有同個job名稱,之後的欄位是開始執行的時間跟結束的時間

    我想要一次可以選多個xlsx檔,在輸入我要的job名稱,按button後,程式就會把每個檔案的指定job那一行顯式在

    dataGridView,確定後在把dataGridView匯出成excel檔,不過才開始就卡在這了

    2012年2月7日 上午 07:20
  • 1. 你的con_str 中的Data Source 已經hard code C:\test.xlsx了

    2. extended properties 的內容要用單引號括住


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度


    • 已編輯 Alex_Lee 2012年2月7日 上午 07:29
    2012年2月7日 上午 07:29
  • 1. 你的con_str 中的Data Source 已經hard code C:\test.xlsx了

    2. extended properties 的內容要用單引號括住


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度



    不好意思。因為想測試所以直接指定,已改回來了
    2012年2月7日 上午 07:51
  • NPOI 本來就是for Web Application 才產生的 最後render成html檔才是正常的

    更正一下上述說法:

    NPOI 是Apache POI 專案的 .NET  版 . 而POI 專案是讓java 開發者能夠透過該專案存取ms-office檔案的 

    重要的是NPOI不會render html檔

    (感謝 小朱 的指正)

    至於你的目的 我看不太懂 


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已編輯 Alex_Lee 2012年2月15日 上午 07:01
    2012年2月7日 上午 08:10
  • 參考你的程式的畫面

    execution result & source code


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年2月7日 上午 08:34
  • 目的在說明一下

    我的excel檔都是如下這樣的格式,每天都會另存一個檔案,現在要做單一job一個月的執行時間的統計

    所以程式畫面是如圖二,這個是別人寫的範本,借我參考用,這個是最合我的需求,不過要改一些地方,如可讀2010excel,跟多個檔案,現在就是卡在不能讀到2010的excel

    程式如上面回覆的,不知出錯在那裡

    圖二

    2012年2月7日 上午 08:37
  • Sorry, 請問一下,如果您另存成xls檔,就能用Jet 4.0讀到嗎? 您的那個File方便放在skyDrive給我們download來試嗎? Thanks.


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2012年2月7日 上午 08:53
    2012年2月7日 上午 08:52
  • 很怪
    我有把下面這個改的跟你的一樣
    string Con_Str = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Full_file_name + ";Extended Properties=\"Excel 12.0;HDR=YES\"";
    不過就是不行
    不知道為什麼,以看到你的畫面的程式對過了,都一樣
    不知可以把此程式的前段也給我看一下嗎?
    謝謝
    2012年2月7日 上午 09:14
  • using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.OleDb;
    
    namespace WindowsFormsApplication4
    {
        public partial class Form1 : Form
        {
            string Full_file_name = String.Empty;
            public Form1()
            {
                InitializeComponent();
                Full_file_name = @"C:\test.xlsx";
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                GetTableSheetName();
            }
    
            private void GetTableSheetName()
            {
                if (Full_file_name.Length == 0)
                {
                    btn_Query.Enabled = false;
                    return;
                }
    
                string Con_Str = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Full_file_name + ";Extended Properties=\"Excel 12.0;HDR=YES\"";
    
                //先取回 sheet 名稱
                try
                {
                    OleDbConnection con = new OleDbConnection(Con_Str);
                    con.Open();
                    DataTable dss = new DataTable();
                    dss = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    cmb_sheet_name.Items.Add("請選擇 sheet 分頁...");
                    for (int i = 0; i < dss.Rows.Count; i++)
                    {
                        cmb_sheet_name.Items.Add(dss.Rows[i].ItemArray[2].ToString().Trim().Replace("'", ""));
                    }
                    con.Close();
                    cmb_sheet_name.SelectedIndex = 0;
                }
                catch (Exception ex)
                {
                    String aa = ex.GetBaseException().ToString();
                    btn_Query.Enabled = false;
                    MessageBox.Show(aa);
                }
            }
        }
    }
    
    你所謂的不行是指什麼呢?有錯誤訊息嗎?

    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年2月7日 上午 09:32
  • 我找到了

    你這行

    string last_sub_file_name = Full_file_name.Substring(Full_file_length - 3, 3).ToUpper();

    這樣會取 檔案的最後三個字:  LSX

    但是底下判斷副檔名是四個字 : XLSX

    當然不行


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度


    • 已編輯 Alex_Lee 2012年2月7日 上午 09:38
    • 已標示為解答 小義 2012年2月7日 上午 10:17
    2012年2月7日 上午 09:37
  • 我另存為xls的話就可以用,不過因為之前的檔案都已存為xlsx,所以想以ACE.OLEDB.12.0試試

    因為在公司,沒辦法skyDrive上傳,SORRY

    2012年2月7日 上午 09:51
  • 我找到了

    你這行

    string last_sub_file_name = Full_file_name.Substring(Full_file_length - 3, 3).ToUpper();

    這樣會取 檔案的最後三個字:  LSX

    但是底下判斷副檔名是四個字 : XLSX

    當然不行


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度


    真的是太感謝了,原來是這個,我把3改為4後就找得到分頁了

    不過馬上就會出現下面的訊息,我會看一下是什麼意思

    也很感謝大家,對我這個完全不懂的人的幫助^^

    2012年2月7日 上午 09:58
  • 請問您124行是什麼Code呀!

    DataAdapter有指定Connection嗎?


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年2月7日 上午 10:18
  • 下半段的程式如下

    第124行是odp.Fill(dt);

     //開啟 excel 檔案
            private void button1_Click(object sender, EventArgs e)
            {
                LoadDATA();
            }
            private void LoadDATA()
            {
                if (cmb_sheet_name.SelectedIndex == 0)
                {
                    return;
                }


                string s_SELECT = txt_SELECT.Text.Trim();
                string s_WHERE = txt_WHERE.Text.Trim();
                if (s_WHERE.Trim().Length != 0)
                {
                    s_WHERE = "WHERE " + s_WHERE;
                }

                string qry = "SELECT " + s_SELECT + " FROM [" + cmb_sheet_name.Text + "] " + s_WHERE;
                try
                {
                    dataGridView1.GridColor = Color.BlueViolet;
                    dataGridView1.BorderStyle = BorderStyle.Fixed3D;
                    dataGridView1.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
                    dataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;

                    con = new OleDbConnection(Con_Str);
                    odp = new OleDbDataAdapter(qry, con);
                    ocb = new OleDbCommandBuilder(odp);
                    dt = new DataTable();
                    dt.Clear();
                   odp.Fill(dt);
                    dataGridView1.DataSource = dt;
                    dataGridView1.Update();
                    lb_count.Text = "Data Couunt:" + dt.Rows.Count.ToString();
                    dataGridView1.AutoResizeColumns();
                }
                catch (Exception ex)
                {
                    String aa = ex.GetBaseException().ToString();
                    MessageBox.Show(aa);
                }
            }
            private void cmb_sheet_name_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (cmb_sheet_name.SelectedIndex != 0)
                {
                    LoadDATA();
                }
            }
        }
    }

    2012年2月8日 上午 02:57
  • 小弟使以用下的Code, OK呢! 你的Con_Str字串有值嗎? 如果先Call con.Open()的話,OK嗎?

    string Con_Str = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=f:\Book1.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES""";
    string qry = "SELECT * FROM [Sheet1$] ";
    try
    {
    	OleDbConnection con = new OleDbConnection(Con_Str);
    	OleDbDataAdapter odp = new OleDbDataAdapter(qry, con);
    	OleDbCommandBuilder ocb = new OleDbCommandBuilder(odp);
    	DataTable dt = new DataTable();
    	dt.Clear();
    	odp.Fill(dt);
    }
    catch (Exception ex)
    {
    	String aa = ex.GetBaseException().ToString();
    	MessageBox.Show(aa);
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    • 已編輯 亂馬客 2012年2月8日 上午 05:03
    2012年2月8日 上午 05:01
  • 小弟使以用下的Code, OK呢! 你的Con_Str字串有值嗎? 如果先Call con.Open()的話,OK嗎?

    string Con_Str = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=f:\Book1.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=YES""";
    string qry = "SELECT * FROM [Sheet1$] ";
    try
    {
    	OleDbConnection con = new OleDbConnection(Con_Str);
    	OleDbDataAdapter odp = new OleDbDataAdapter(qry, con);
    	OleDbCommandBuilder ocb = new OleDbCommandBuilder(odp);
    	DataTable dt = new DataTable();
    	dt.Clear();
    	odp.Fill(dt);
    }
    catch (Exception ex)
    {
    	String aa = ex.GetBaseException().ToString();
    	MessageBox.Show(aa);
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    也不知為什麼,內容都跟你一樣,但就是不行,請問你有mail嗎?我把程式

    寄給你看看

    2012年2月8日 上午 05:30
  • 你方便用SkyDrive放到public給我們download嗎?

    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年2月8日 上午 05:59
  • 因為是在公司,公司好像把skydrive給擋了…連不上去

    2012年2月8日 上午 06:21
  • 所以您的connString有值,並直接針對Sheet1$ Select! ?

    請先Check Conn是否可Open!


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年2月8日 上午 11:17
  • 你有定義兩個 Con_str 你知道嗎?

    一個是class member 值是String.Empty

    另一個是GetTableSheetName()中的local 變數 值是 "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Full_file_name + ";Extended Properties='Excel 12.0;HDR=YES'";

    而你在LoadData()中的Con_str 會用的是 class member

    解決方式是 把 GetTableSheetName()中的 string Con_str  = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Full_file_name + ";Extended Properties='Excel 12.0;HDR=YES'"; 

    改成 

    Con_str  = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Full_file_name + ";Extended Properties='Excel 12.0;HDR=YES'"; 

    就好了


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    • 已標示為解答 小義 2012年2月15日 上午 05:28
    2012年2月8日 下午 06:30
  • 真的很感謝,內容出來了,距離目標前進一步了

    現在要試試搜尋功能了

    2012年2月15日 上午 05:33