1. 程式人生 > >C#遍歷獲取檔案資訊匯出至EXCEL

C#遍歷獲取檔案資訊匯出至EXCEL

記錄八月份寫的一個小工具,當需要處理的很多資料在檔名中存在時,
1,使用Directory類下的GetDirectories方法根據檔案地址開啟檔案獲取目錄。
2,然後再使用DirectoryInfo類下的GetFiles獲取具體檔案。
3,根據具體檔案獲取檔名,大小等資訊。
4,匯出至EXCEL

名稱空間注意:
File類需要System.IO
Excel需要Aspose.Cells
一、選擇資料夾返回檔案地址

private void btn_Select_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog FBDialog = new FolderBrowserDialog();
            if (FBDialog.ShowDialog() == DialogResult.OK)
            {
                string strPath = FBDialog.SelectedPath;
                txt_File.Text = strPath;
            }
        }

二、遍歷獲取當前資料夾下的檔案資訊
winform窗體中可以有一個ListViewItem元件,便於返回檔案資訊。


private void button2_Click(object sender, EventArgs e)
        {
            try
            {
            DirectoryInfo dir2 = new DirectoryInfo(txt_File.Text);
            foreach (FileInfo file in dir2.GetFiles("*.wav"))
            {
                ListViewItem item = new ListViewItem();
                // strAA = strAA + file.Name +"   "+file.Length/1024+"kb"+ "\r\n";
                item.Text = file.Name.Substring(0, 8);
                item.SubItems.Add(file.Name.Substring(9, 6));
                item.SubItems.Add(file.Name.Substring(17, 5));
                item.SubItems.Add(file.Length / 1024 + "kb");
                listView1.Items.Add(item);//程式碼中建立的ListViewItem中的item資訊返回給winform中建立的listView元件。

            }                        
            }
            catch
            {

            }
        }

三、遍歷獲取三級資料夾下的檔案

        private void button1_Click(object sender, EventArgs e)
    {

        try
        {
            string[] dirs = Directory.GetDirectories(txt_File.Text);

            for (int i = 0; i < dirs.Length; i++)
            {
                string[] udirs = Directory.GetDirectories(dirs[i]);
                for (int j = 0; j < udirs.Length; j++)
                {
                    DirectoryInfo dir = new DirectoryInfo(udirs[j]);
                    foreach (FileInfo file in dir.GetFiles("*.wav"))//獲取wav檔案的分段的檔名資訊和大小,詳細可參考GetFiles的具體用法。
                    {
                        ListViewItem item = new ListViewItem();
                        // strAA = strAA + file.Name +"   "+file.Length/1024+"kb"+ "\r\n";
                        item.Text = file.Name.Substring(0,8);
                        item.SubItems.Add(file.Name.Substring(9, 6));
                        item.SubItems.Add(file.Name.Substring(17, 5));
                        item.SubItems.Add(file.Length / 1024 + "kb");
                        listView1.Items.Add(item);

                    }
                }

            }

        }
        catch
        {

        }
    }

四、將listView元件裡的資訊匯出至EXCEL
(一)、匯出至EXCEL的函式

public void SaveToExcel(ListView listview, /*List<int> columnwidth,*/ string title)
        {
            string path;
            SaveFileDialog filedialog = new SaveFileDialog();
            filedialog.Filter = "Excel file(*,xls)|*.xls";
            if (filedialog.ShowDialog() == DialogResult.OK)
            {
                path = filedialog.FileName;
                //新建excel
                Workbook wb = new Workbook();
                Worksheet ws = wb.Worksheets[0];
                Cells cell = ws.Cells;
                //儲存資料到陣列
                string[,] _dataReport = new string[listview.Items.Count, listview.Columns.Count];
                for (int i = 0; i < listview.Items.Count; i++)
                {
                    for (int j = 0; j < listview.Columns.Count; j++)
                    {
                        _dataReport[i, j] = listview.Items[i].SubItems[j].Text.ToString();
                    }
                }
                Range range1 = cell.CreateRange(0, 0, 2, listview.Columns.Count);
                range1.Merge();
                //標題style
                cell.SetRowHeight(0, 40);
                Style style1 = wb.Styles[wb.Styles.Add()];
                style1.HorizontalAlignment = TextAlignmentType.Center;
                style1.Font.Name = "宋體";
                style1.Font.IsBold = true;
                style1.Font.Size = 20;
                //內容style
                Style style2 = wb.Styles[wb.Styles.Add()];
                style2.HorizontalAlignment = TextAlignmentType.Center;
                style2.Font.Size = 14;
                //儲存標題和內容(A1和此時(0,0)一樣)
                cell["A1"].PutValue(title);
                cell["A1"].SetStyle(style1);
                //第二行內容
               
                cell[2, 0].PutValue("名稱1");
                cell[2, 1].PutValue("名稱2");
                
                cell[2, 0].SetStyle(style2);
                cell[2, 1].SetStyle(style2);
                //第三行以後內容
                int posStart = 3;
                for (int i = 0; i < listview.Items.Count; i++)
                {
                    for (int j = 0; j < listview.Columns.Count; j++)
                    {
                        cell[i + posStart, j].PutValue(_dataReport[i, j].ToString());
                        cell[i + posStart, j].SetStyle(style2);
                    }
                }
                //合併單元格顯示時間(注意合併完之後,對於本身的行變數和列變數的計數並沒有變化。)(B5和此時(4,1)一樣)
               /* Range range2 = cell.CreateRange(4, 1, 1, 2);
                range2.Merge();
                cell["B5"].PutValue(_dataReport[listview.Items.Count - 1, listview.Columns.Count - 1].ToString());
                cell["B5"].SetStyle(style2);
                for (int i = 0; i < listview.Columns.Count; i++)
                {
                    cell.SetColumnWidth(i, Convert.ToDouble(columnwidth[i].ToString()));
                }*/
                //儲存
                try
                {
                    wb.Save(path);
                    MessageBox.Show("成功");
                    //textBox5.AppendText(DateTime.Now.ToString() + " 儲存成功。位置:" + path.ToString() + "\r\n");
                }
                catch (Exception e)
                {
                    MessageBox.Show("失敗,原因:" + e);
                    //textBox5.AppendText(DateTime.Now.ToString() + "儲存失敗。");
                }
            }

        }

(二)、呼叫函式

 private void btn_Put_Click(object sender, EventArgs e)
        {
            SaveToExcel(listView1,"獲取的資料");
        }