3

更新 2

string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", EXCELFILENAME);

            string testCaseName = "test_case_2";

            string query = String.Format("SELECT * from [{0}$] WHERE columns={1}", workbookName, testCaseName);

            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);

            DataSet dataSet = new DataSet();
            dataAdapter.Fill(dataSet); //<<ERROR 

        DataTable myTable = dataSet.Tables[0]; 

エラー: 1 つ以上の必須パラメーターに値が指定されていません。

更新終了

アップデート:

string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", EXCELFILENAME);
            string query = String.Format("select * from [{0}$]", workbookName);

            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);               
            DataSet dataSet = new DataSet();
            dataAdapter.Fill(dataSet);

            DataTable myTable = dataSet.Tables[0];

セルからデータを読み取り、配列/文字列に格納する方法。私はワークシートを読み終えましたが、他に良い方法が見つかりません

ここに私のExcelシートがあります:

ここに画像の説明を入力

私の場合、test_case_1またはtest_case_2などで列を渡し、その特定の行の列を読み取ることができるはずです....

4

3 に答える 3

2

LinqToExcelをご覧になることをお勧めします。これにより、.NET での Excel のクエリが非常に簡単になります。

var book = new LinqToExcel.ExcelQueryFactory(@"E:\Temporary\Workbook.xlsx");

var current_test_case = "Test_case_1";

var query =
    from row in book.Worksheet("Sheet1")
    let columns = row["columns"].Cast<string>()
    where columns == current_test_case
    select new
    {
        id = row["id"].Cast<int>(),
        name = row["name"].Cast<string>(),
        caption = row["caption"].Cast<string>(),
        date = row["date"].Cast<DateTime>(),
        success = row["success"].Cast<bool>(),
    };
于 2012-08-30T03:40:01.147 に答える
0

こんにちは、Abu Hamzah です。読み取り専用の列が必要です。Excel データを読み取るためのコンソール アプリのコードはこちらです。

class Program
{
    internal static ILog logger = LogManager.GetLogger(typeof(Program));
    static void Main(string[] args)
    {
        log4net.Config.XmlConfigurator.Configure();
        string firstName, lastName, dob, lexisNexisID;
        string filePath = @"yor directory path\your file name";

        ExcelProvider provider = ExcelProvider.Create(filePath, "Sheet1");
        foreach (ExcelRow row in (from x in provider select x))
        {
            Console.WriteLine("{0}", row.GetString(1));
            /* the row.Getstring(index) the index is for your column you mey select morcolume as Console.WriteLine("{0}/t{1}", row.GetString(0),row.Getstring(1)); */
        }

    }

}

public class ExcelRow
{
    List<object> columns;

    public ExcelRow()
    {
        columns = new List<object>();
    }

    internal void AddColumn(object value)
    {
        columns.Add(value);
    }

    public object this[int index]
    {
        get { return columns[index]; }
    }

    public string GetString(int index)
    {
        if (columns[index] is DBNull)
        {
            return null;
        }
        return columns[index].ToString();
    }

    public int Count
    {
        get { return this.columns.Count; }
    }
}

public class ExcelProvider : IEnumerable<ExcelRow>
{
    private string sheet;
    private string filePath;
    private List<ExcelRow> rows;


    public ExcelProvider()
    {
        rows = new List<ExcelRow>();
    }

    public static ExcelProvider Create(string filePath, string sheet)
    {
        ExcelProvider provider = new ExcelProvider();
        provider.sheet = sheet;
        provider.filePath = filePath;
        return provider;
    }

    private void Load()
    {
        string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=    ""Excel 12.0;HDR=YES;""";
        connectionString = string.Format(connectionString, filePath);
        rows.Clear();
        using (OleDbConnection conn = new OleDbConnection(connectionString))
        {
            try
            {
                conn.Open();
            }
            catch (Exception ex)
            {
            }
            using (OleDbCommand cmd = conn.CreateCommand())
            {
                cmd.CommandText = "select * from [" + sheet + "$]";
                using (OleDbDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        ExcelRow newRow = new ExcelRow();
                        for (int count = 0; count < reader.FieldCount; count++)
                        {
                            newRow.AddColumn(reader[count]);
                        }
                        rows.Add(newRow);
                    }
                }
            }
        }
    }

    public IEnumerator<ExcelRow> GetEnumerator()
    {
        Load();
        return rows.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        Load();
        return rows.GetEnumerator();
    }

}
于 2012-08-30T03:57:34.230 に答える
0

フィルタリングについて。

データの取得に OleDb を使用しているため、より高度な SQL の使用を妨げるものは何もありません。

string testCaseName = "Test_case_1
string query = String.Format("SELECT * from [{0}$] WHERE columns=\"{1}\"", workbookName, testCaseName);

フィルタリングに列の名前を使用できます。あなたの場合、フィルターはフィールドにあります。(ところで、紛らわしい名前です)

テーブルのヘッダーは最初の行にある必要があることを覚えている限り、テーブルを 1 行上に移動する必要がある場合があります。

于 2012-08-30T09:34:15.487 に答える