0

Excel スプレッドシートを .csv ファイルにロードする方法を学ぶために与えられたコードを調べていますDataTable。私はその部分を機能させました。少なくとも、異常終了しなかったので機能したと思います。ここでやりたいことは、DataTable に値が設定されているかどうかを確認することです。私が抱えている問題はForm、クラスからリストを認識させることです。

私のクラスのコードは次のとおりです。

namespace WindowsFormsApplication12
{
class Class1
{
    public List<DataTable> ImportExcel(string FileName)
    {
        List<DataTable> _dataTables = new List<DataTable>();
        string _ConnectionString = string.Empty;
        string _Extension = Path.GetExtension(FileName);

        if (_Extension.Equals(".xls", StringComparison.CurrentCultureIgnoreCase))
        {
            _ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + FileName + ";Extended Properties=Excel 12.0;";
        }

        else if (_Extension.Equals(".xlsx", StringComparison.CurrentCultureIgnoreCase))
        {
            _ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=Excel 12.0 Xml;";
        }

        DataTable dataTable = null;
        var count = 0;
        using (OleDbConnection oleDbConnection = new OleDbConnection(string.Format(_ConnectionString, FileName)))
        {
            oleDbConnection.Open();
            DataTable dbSchema = oleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables_Info, null);
            foreach (DataRow item in dbSchema.Rows)
            {
                using (OleDbCommand oleDbCommand = new OleDbCommand())
                {
                    oleDbCommand.Connection = oleDbConnection;
                    oleDbCommand.CommandText = string.Format("SELECT * FROM [Sheet1$]", item["TABLE_NAME"].ToString());

                    using (OleDbDataAdapter oleDbDataAdapter = new OleDbDataAdapter())
                    {
                        if (count < 3)
                        {
                            oleDbDataAdapter.SelectCommand = oleDbCommand;
                            dataTable = new DataTable(item["TABLE_NAME"].ToString());
                            oleDbDataAdapter.Fill(dataTable);
                            _dataTables.Add(dataTable);
                            count++;
                        }
                    }
                }
            }
        }
        return _dataTables;
    }
}
}

私のフォームのコードは次のとおりです。

namespace WindowsFormsApplication12
{
public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string fileName = textBox1.Text;
        Class1 ext = new Class1();

        if (string.IsNullOrEmpty(fileName))
            MessageBox.Show("Please enter a file extension");
        else
            ext.ImportExcel(fileName);
    }
  }
}

私は次のようないくつかのことを試しました:

List<DataTable> ldt = new Class1.ImportExcel ListBox.Items.Add(ext.ImportExcel._dataTables)

他のいくつかのものと一緒ですが、どれも機能していないようです。a を呼び出す方法についてグーグルで検索しListましたが、何も機能しませんでした。DataTable以前の演習で aを呼び出しましたが、それをこのコードに合わせることはできませんでした。私に役立つドキュメントがある場合、または私が近くにいる場合は、正しい方向に私を押してください。前もって感謝します。

4

2 に答える 2

1

次の方法を使用すると、任意のタイプのキーでリストを使用できます。

List<String> Test = new List<String>();

Test.Add("TEST");
Test.Add("Test");

Console.WriteLine(Test[0]); // TEST
Console.WriteLine(Test[1]); // Test

char[] t = Test[0].ToCharArray();

名前または ID を検索してリストの値を取得するには、次の方法を使用します。

List<String> Test = new List<String>();

Test.Add("TEST");
Test.Add("Test");

string arry = Test.Where(x => x[0] == 'T').ToArray()[0];

Console.WriteLine(arry);

私はまだデータテーブルのものを試していませんが、これらのメソッドを簡単に使用できます. Foreach ステートメントはいくつかのものにも最適です:

List<String> Test = new List<String>();

Test.Add("TEST");
Test.Add("Test");

foreach (string str in Test)
{
    Console.WriteLine(str);
}
于 2013-10-31T18:25:15.973 に答える
1

FileHelpersライブラリを使用して、データを簡単にインポートすることができます。


ImportData.cs ファイル

[DelimitedRecord(",")] 
public class ImportedData
{ 
    public string DropDownValue;
    public string DropDownText;
}

Form1 ファイル

 public partial class Form1 : Form
 {
    private void button1_Click(object sender, EventArgs e)
    {
    string fileName = textBox1.Text;
    FileHelperEngine engine = new FileHelperEngine(typeof(ImportedData));
    // To Read Use:
    ImportedData[] customData = engine.ReadFile(fileName) as ImportedData[];

    // let's say you named your ListBox as listBox1
    listBox1.DataSource = customData;
    listBox1.DataTextField = "DropDownText";
    listBox1.DataValueField = "DropDownValue";
    listBox1.DataBind();
    }
}

FileHelper ライブラリを使用したくない場合は、次のようにします。

 ListBox.DataSource = ldt;
 ListBox.DataBind();
于 2013-10-31T19:03:11.963 に答える