c# - 遍历目录中的子目录

标签 c# asp.net excel directory subdirectory

我有一个目录“文件夹”,该目录中有许多子目录。每个子目录中都有许多图像。我想遍历“文件夹”目录中的子目录,然后遍历每个目录中的所有图像以将图像导出到 Excel,每个子目录中的图像都在一个 Excel 工作表中。

例如如果我有十个子目录,我应该有一个包含十个 Excel 工作表的 Excel 工作簿,那么在每个 Excel 工作表中都会有来自每个子目录的图像。

这是我尝试过的方法,但图像只出现在 Worksheet1 而不是所有工作表上:

   public void ExportToExcel()
        {
            //for export
            ExcelPackage objExcelPackage = new ExcelPackage();   //create new workbook

            string[] filesindirectory = Directory.GetDirectories(Server.MapPath("~/Folder"));
            int count = 0;
            int count1 = 0;
            int x = 25;
            int finalValue = 0;

            foreach (string subdir in filesindirectory)
            {                      
                count++;
                ExcelWorksheet ws = objExcelPackage.Workbook.Worksheets.Add("Worksheet" + count); //create new worksheet

            foreach (string img in Directory.GetFiles(subdir))
            {
                count1++;
                System.Web.UI.WebControls.Image TEST_IMAGE = new System.Web.UI.WebControls.Image();
                System.Drawing.Image myImage = System.Drawing.Image.FromFile(img);
                var pic = ws.Drawings.AddPicture(count1.ToString(), myImage);
                // Row, RowoffsetPixel, Column, ColumnOffSetPixel
                if (count1 > 1)
                {
                    pic.SetPosition(finalValue, 0, 2, 0);
                    finalValue += (x + 1); // Add 1 to have 1 row of empty row
                }
                else
                {
                    pic.SetPosition(count1, 0, 2, 0);
                    finalValue = (count1 + x) + 1; // Add 1 to have 1 row of empty
                }
            }
            }

            var filepath = new FileInfo(@"C:\Users\user\Desktop\Test\" + datetime.ToString("dd-MM-yyyy_hh-mm-ss") + ".xlsx");
            objExcelPackage.SaveAs(filepath);
        }

如何循环遍历目录中的每个子目录,然后使用 C# 循环遍历每个子目录中的所有图像?

最佳答案

Janne Matikainen 答案是正确的,但您需要知道如何修改您的代码...

首先更改您的代码这一行

 string[] filesindirectory = Directory.GetFiles(Server.MapPath("~/Folder"));

 string[] filesindirectory = Directory.GetDirectories(Server.MapPath("~/Folder"));

其次,您需要在您的子文件夹路径中搜索文件

foreach (string subdir in filesindirectory)

subdir 是您的目录路径。

只需返回与获取文件相同的操作

foreach (string img in  Directory.GetFiles(subdir))

完成foreach子目录后

foreach (string img in  Directory.GetFiles(subdir)) 
{
   // Your Code
}
// Reset the Count1
count1 = 0;

重置它,因为您正在为每个工作表增加动态行生成。
然后你在新的工作表上,你没有重置它。
它将按照之前的表格继续计数。

要获取文件夹名称,您可以通过拆分轻松获取它。
在创建工作表之前,请按照以下步骤进行操作。

string[] splitter = subdir.Split('\\');
string folderName = splitter[splitter.Length - 1];

注意 如果文件夹名称 包含一些符号,它可能无法将其设置为excel 工作表,而且名称不能太长。
请确保您替换为 excel 工作表支持的符号

关于c# - 遍历目录中的子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33296318/

相关文章:

excel - 如何在VBA中实现自定义可迭代类

c# - Full outer join,在 2 个数据表上,带有列列表

c# - 在 XAML 中实现全局命名空间

c# - 在 C# .cs 文件中放置 using 语句的位置

css - GridView 超出其定义的宽度

excel - 如何在Excel中对列表进行分组?

c# - 如何在 C# 中使用 WebRequest

c# - 如何在 asp.net 页面中添加动态数量的用户控件?

asp.net - 带有 IHttpControllerSelector 的 AttributeRouting - Api 版本控制

excel - VBA 和私有(private)函数