C#遍歷獲取檔案資訊匯出至EXCEL
阿新 • • 發佈:2018-11-17
記錄八月份寫的一個小工具,當需要處理的很多資料在檔名中存在時,
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,"獲取的資料");
}