记录八月份写的一个小工具,当需要处理的很多数据在文件名中存在时,
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,"获取的数据");
}