c# - 如何获取项目 Excel 路径
问题描述
在我的项目中,我有 Test Data 文件夹,里面有我的 xlsx 文件。
我正在尝试获取项目路径文件夹,以便从他们的路径中读取而不是对路径进行硬编码。但它总是从项目/bin/debug 路径中读取。这是我的 Excel 实用程序。在我的课堂上,我正在初始化 ExcelUtil 类并使用 ReadData 方法
public class ExcelUtil
{
public static void InitializeExcel()
{
string exeDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
File.OpenRead(System.IO.Path.Combine(exeDir, "Data.xlsx"));
}
public static DataTable ExcelToDataTable(string fileName)
{
//Open the file
using (var stream = File.Open(fileName, FileMode.Open, FileAccess.Read))
{
//read the excel file
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
var result = reader.AsDataSet(new ExcelDataSetConfiguration()
{
//using anaysome method
ConfigureDataTable = (data) => new ExcelDataTableConfiguration()
{
UseHeaderRow = true
}
});
//Storing in DataCollection
DataTableCollection table = result.Tables;
DataTable resultTable = table["Sheet1"];
return resultTable;
}
}
}
//storing the Data from excel in List type of othe custom class
public static List<DataCollection> datacol = new List<DataCollection>();
//Method populates the data into the collection
public static void PopulateInCollection(string fileName)
{
DataTable table = ExcelToDataTable(fileName);
//Iterating through the rows and columns
for (int row = 1; row <= table.Rows.Count; row++)
{
for (int col = 0; col < table.Columns.Count; col++)
{
DataCollection dTable = new DataCollection()
{
RowNumber = row,
ColName = table.Columns[col].ColumnName,
ColValue = table.Rows[row - 1][col].ToString()
};
//Add all the details for each row
datacol.Add(dTable);
}
}
}
//Method read data from excel using rownum and colname
public static string ReadData(int rowNumber, string columnName)
{
try
{
//Retriving data using LINQO to reduce much iterations
string data = (from colData in datacol
where colData.ColName == columnName && colData.RowNumber == rowNumber
select colData.ColValue).SingleOrDefault();
return data.ToString();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return null;
}
}
}
//Custom class to hold rowsnum and columnnum adn val data
public class DataCollection
{
public int RowNumber { get; set; }
public string ColName { get; set; }
public string ColValue { get; set; }
}
}
解决方案
当您使用 NUnit 时,您需要从中获取路径TestContext.CurrentContext.TestDirectory
,这将是执行测试的文件夹。然后只需将您的相对路径添加到该路径:
public static void InitializeExcel()
{
string testDataPath = System.IO.Path.Combine(TestContext.CurrentContext.TestDirectory, "TestData");
File.OpenRead(System.IO.Path.Combine(testDataPath, "Data.xlsx"));
}
推荐阅读
- amazon-web-services - 是否可以在 AWS API Gateway 的响应正文映射模板中访问原始请求正文?
- java - 我正在尝试使用两个 firebase 身份验证(客户端、客户),我需要将 firebase 身份验证与数据库查询一起使用
- assembly - 在汇编中编写优化的 memcopy 时要考虑的架构属性
- r - 用于过滤数据框中可能存在或不存在观察值的数据的代码
- reactjs - 如何从表单中添加键名和键值?
- c# - 仍登录 MVC 站点,但无法调用 Web API
- python - 使用 Python 编辑 CSV 行
- haskell - 确定元素在列表中的位置的递归 Haskell 函数
- java - 使用 BufferedImage 将图像加载到 Java - Oracle 教程
- xml - XPath 中的 //*[*] 和 //*[.] 有什么区别?