如何以编程方式检查电子表格是否在C#中包含标题

时间:2017-05-01 14:27:42

标签: c# excel filepath

我正在创建一个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(),
                };

只有列位于正确位置时才能正常工作。 如果他们不在正确的位置,我的想法是向用户显示消息以获取正确的信息

有没有人有任何建议? (对不起,第一次发帖提问并仍在学习思考)

2 个答案:

答案 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