1

CSharp プログラミングは初めてです。フォルダーから複数の Excel ファイルを読み取る必要があります。そのフォルダ内のExcelファイルの数がわかりません。すべてのファイルを 1 つずつ読みたい。1 つのファイルを読み取るために、いくつかのコードを記述しました。このコードを適用して、フォルダー内のすべてのファイルを 1 つずつ読み取ります。道を教えてください。これが私のコードです。

class RatWalk
{
    public List<RatStep> steps = new List<RatStep>();
    string[] Individal_Runs = Directory.GetFiles(@"C:\Users\AG_Winter\Desktop\Individual_Runs");
    public void LoadFromFile(String fileName) // reads data from excel file
    {
        steps.Clear();
        XlsFile file = new XlsFile(fileName);
        try
        {
           // Everything I wanna do
        }
        catch (NullReferenceException ex)
        {
            Console.Out.WriteLine("No run");
        }
    }
}

皆さん、ありがとうございました。コメントは文字数制限のため、返信の仕方がわかりません。だからここに入力しています。

私のプログラムでは、フォルダから xlsx ファイルを 1 つずつ読み込みたいと考えています。現在、ボタンを使用して単一のファイルを参照しています。しかし、このボタンを使用して、ファイルがあるフォルダーを参照したいと思います。このフォルダーを選択すると、プログラムはフォルダー内のすべてのファイルを 1 つずつ自動的に実行する必要があります。これが私がこの前にしたことです。

[\code = c#] class RatWalk { public List steps = new List();

    public void LoadFromFile(String fileName)                       // reads data from excel file
    {

            steps.Clear();

            XlsFile file = new XlsFile(fileName);
try{
//everything I wanna do

}キャッチ{} }

 private void InitializeComponent()                             
        {
            EventHandler handler = new EventHandler(OnClick);
            button.Text = "Browse for the XLS file";                    
            // button properties                                       
            this.Controls.Add(button);
}
private void OnClick(object sender, EventArgs e)            // Browses for the file and loads the selected Excel file
        {
            OpenFileDialog fileDialog = new OpenFileDialog();
            if (fileDialog.ShowDialog() != DialogResult.OK)
                return;
            ratWalk.LoadFromFile(fileDialog.FileName);

           // Whatever I wanna do   
        }

ここでは、ボタンをクリックしてフォルダーを選択すると、フォルダー内のすべてのファイルが 1 つずつ実行されるように変更します。

これを行う方法を教えてください。

ありがとうございました。

4

3 に答える 3

3

例を示しますが、あとはあなたに任せます。

string [] fileEntries = Directory.GetFiles(sourceDir);
foreach(string fileName in fileEntries)
{
   // do something with fileName
   Console.WriteLine(fileName);
}

ところで、これはトラフサブフォルダーを反復しません。

于 2012-12-17T11:48:16.877 に答える
1
        string[] Individal_Runs = Directory.GetFiles(@"D:\testfiles");
        foreach (string s in Individal_Runs)
        {
            try
            {
String theConnString= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + s + ";Extended Properties=Excel 8.0;";

    OleDbConnection objConn = new OleDbConnection(theConnString);
    objConn.Open();

    OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM [sheet1$]", objConn);
    OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();

    objAdapter1.SelectCommand = objCmdSelect;
    DataSet objDataset1 = new DataSet();
    objAdapter1.Fill(objDataset1, "XLData");

     //Your code here

    objConn.Close();


            }
            catch (NullReferenceException ex)
            {
                Console.Out.WriteLine("No run");
            }
        }
于 2012-12-17T11:56:02.537 に答える
0
  1. ターゲット フォルダーへのパスを取得します。
  2. フォルダーを取得したら、その下にあるすべての Excel ファイルをプログラムで取得し、それらをリストに入れます。
  3. 1 つの Excel ファイルを読み取り、Excel ファイルのリストを反復処理し、同じ関数をループで使用するコード。
using System;
using System.IO;

namespace FileOperationsSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Change this path to the directory you want to read
            string path = "C:\\Junk";             
            DirectoryInfo dir = new DirectoryInfo(path);
            Console.WriteLine("File Name                       Size        Creation Date and Time");
            Console.WriteLine("=================================================================");
            foreach (FileInfo flInfo in dir.GetFiles())
            {
                String name = flInfo.Name;
                long size = flInfo.Length;
                DateTime creationTime = flInfo.CreationTime;
                Console.WriteLine("{0, -30:g} {1,-12:N0} {2} ", name, size, creationTime);
            }
            Console.ReadLine();
        }
    }
}
于 2012-12-17T11:49:34.150 に答える