我正在创建一个winform应用程序,用户每天都会选择一个xlsx文件,并将当天的发货信息与我们的发票数据合并。
我遇到的挑战是当用户没有使用winform数据所需的规范下载xlsx文件时。 (我希望我可以通过API连接消除这一步,但遗憾的是我不能)
我的第一步是检查xlsx文件是否包含我的文件路径有效的标题
实施例
string connString = "provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + *path* + "';Extended Properties='Excel 12.0;HDR=YES;';";
从OpenFileDialog框返回路径
如果选择的文件未下载标题,则上述语句会引发异常。
如果改变HDR = YES;到HDR = NO;然后我无法识别我需要的列,以及用户是否打算包含正确的列。
然后我的代码尝试将数据加载到DataTable
private void loadRows()
{
for (int i = 0; i < deliveryTable.Rows.Count; i++)
{
DataRow dr = deliveryTable.Rows[i];
int deliveryId = 0;
bool result = int.TryParse(dr[0].ToString(), out deliveryId);
if (deliveryId > 1 && !Deliveries.ContainsKey(deliveryId))
{
var delivery = new Delivery(deliveryId)
{
SalesOrg = Convert.ToInt32(dr[8]),
SoldTo = Convert.ToInt32(dr[9]),
SoldName = dr[10].ToString(),
ShipTo = Convert.ToInt32(dr[11]),
ShipName = dr[12].ToString(),
};
只有列位于正确位置时才能正常工作。 如果他们不在正确的位置,我的想法是向用户显示消息以获取正确的信息
有没有人有任何建议? (对不起,第一次发帖提问并仍在学习思考)
答案 0 :(得分:0)
我猜您正在将电子表格加载到Datatable中?用一行代码很难说清楚。我将使用数据表中的列集合并检查是否存在所需的所有列。用于枚举下面列的示例代码。
private void PrintValues(DataTable table)
{
foreach(DataRow row in table.Rows)
{
foreach(DataColumn column in table.Columns)
{
Console.WriteLine(row[column]);
}
}
}
答案 1 :(得分:0)
Game