Fel*_*Soh 4 c# asp.net directory excel subdirectory
我有一个目录'Folder',该目录中有许多子目录.在每个子目录中都有很多图像.我想遍历'Folder'目录中的子目录,然后遍历每个目录中的所有图像,将图像导出到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);
}
Run Code Online (Sandbox Code Playgroud)
如何遍历目录中的每个子目录,然后使用C#循环遍历每个子目录中的所有图像?
Janne Matikainen的回答是正确的,但您需要知道如何修改代码...
首先将此代码更改为代码
string[] filesindirectory = Directory.GetFiles(Server.MapPath("~/Folder"));
Run Code Online (Sandbox Code Playgroud)
至
string[] filesindirectory = Directory.GetDirectories(Server.MapPath("~/Folder"));
Run Code Online (Sandbox Code Playgroud)
其次,您需要在您的子文件夹路径中搜索文件
foreach (string subdir in filesindirectory)
Run Code Online (Sandbox Code Playgroud)
subdir是您的目录的路径.
只需回复你为获取文件所做的事情
foreach (string img in Directory.GetFiles(subdir))
Run Code Online (Sandbox Code Playgroud)
完成foreach子目录后
foreach (string img in Directory.GetFiles(subdir))
{
// Your Code
}
// Reset the Count1
count1 = 0;
Run Code Online (Sandbox Code Playgroud)
重置它,因为您为每个工作表生成动态行生成.
然后你在新表,你没有重置它.
它将按照前一张纸继续计数.
要获取文件夹名称,您可以通过拆分轻松获取它.
在创建工作表之前,请按照以下步骤进行操作.
string[] splitter = subdir.Split('\\');
string folderName = splitter[splitter.Length - 1];
Run Code Online (Sandbox Code Playgroud)
如果folderName包含某些符号,请注意它可能无法将其设置为excel工作表,并且名称也不能太长.
请确保使用excel工作表的可支持符号替换
这应该列出从 C:\Images 开始的所有文件,并遍历所有子目录及其子目录。
public void ExportToExcel()
{
//for export
var objExcelPackage = new ExcelPackage(); //create new workbook
this.ListFiles(objExcelPackage, 0, Server.MapPath("~/Folder"));
var filepath = new FileInfo(@"C:\Users\user\Desktop\Test\" + datetime.ToString("dd-MM-yyyy_hh-mm-ss") + ".xlsx");
objExcelPackage.SaveAs(filepath);
}
public void ListFiles(ExcelPackage objExcelPackage, int worksheetIndex, string path)
{
var imageCount = 0;
var x = 25;
var finalValue = 0;
var files = Directory.GetFiles(path).Select(s => new FileInfo(s));
if (files.Any())
{
//create new worksheet
var ws = objExcelPackage.Workbook.Worksheets.Add("Worksheet" + (++worksheetIndex));
foreach (var file in files)
{
imageCount++;
var TEST_IMAGE = new System.Web.UI.WebControls.Image();
var myImage = System.Drawing.Image.FromFile(img);
var pic = ws.Drawings.AddPicture(imageCount.ToString(), myImage);
// Row, RowoffsetPixel, Column, ColumnOffSetPixel
if (imageCount > 1)
{
pic.SetPosition(finalValue, 0, 2, 0);
finalValue += (x + 1); // Add 1 to have 1 row of empty row
}
else
{
pic.SetPosition(imageCount, 0, 2, 0);
finalValue = (imageCount + x) + 1; // Add 1 to have 1 row of empty
}
}
}
foreach (var dir in Directory.GetDirectories(path))
{
this.ListFiles(objExcelPackage, worksheetIndex, dir);
}
}
Run Code Online (Sandbox Code Playgroud)