繁体   English   中英

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

[英]How do you programmatically check if a spreadsheet has headers in C#

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

只有当列在正确的位置时,这一切才有效。 如果它们不在正确的位置,我的想法是向用户显示一条消息以获取正确的信息

有没有人有什么建议? (抱歉,第一次发问题,还在学习思考)

我猜您正在将电子表格加载到数据表中? 用一行代码很难说清楚。 我会使用数据表中的列集合并检查您想要的所有列是否都在那里。 用于枚举以下列的示例代码。

private void PrintValues(DataTable table)
{
    foreach(DataRow row in table.Rows)
    {
        foreach(DataColumn column in table.Columns)
        {
            Console.WriteLine(row[column]);
        }
    }
}
     private void GetExcelSheetForUpload(string PathName, string UploadExcelName)
        {
            string excelFile = "DateExcel/" + PathName;
            OleDbConnection objConn = null;
            System.Data.DataTable dt = null;
            try
            {
    
                DataSet dss = new DataSet();
                String connString = "Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=True;Extended Properties=Excel 12.0 Xml;Data Source=" + PathName;
                objConn = new OleDbConnection(connString);
                objConn.Open();
                dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                if (dt == null)
                {
                    return;
                }
                String[] excelSheets = new String[dt.Rows.Count];
                int i = 0;
                foreach (DataRow row in dt.Rows)
                {
                    if (i == 0)
                    {
                        excelSheets[i] = row["TABLE_NAME"].ToString();
                        OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + excelSheets[i] + "]", objConn);
                        OleDbDataAdapter oleda = new OleDbDataAdapter();
                        oleda.SelectCommand = cmd;
                        oleda.Fill(dss, "TABLE");
    
                    }
                    i++;
                }
                grdExcel.DataSource = dss.Tables[0].DefaultView;
                grdExcel.DataBind();
                lblTotalRec.InnerText = Convert.ToString(grdExcel.Rows.Count);
    
            }
    
            catch (Exception ex)
            {
                ViewState["Fuletypeidlist"] = "0";
                grdExcel.DataSource = null;
                grdExcel.DataBind();
            }
            finally
            {
                if (objConn != null)
                {
                    objConn.Close();
                    objConn.Dispose();
                }
                if (dt != null)
                {
                    dt.Dispose();
                }
            }
    
        }


 if (grdExcel.HeaderRow.Cells[0].Text.ToString() == "CODE")
                {
                    GetExcelSheetForEmpl(PathName);
                }
                else
                {
                    divStatusMsg.Style.Add("display", "");
                    divStatusMsg.Attributes.Add("class", "alert alert-danger alert-dismissable");
                    divStatusMsg.InnerText = "ERROR !!... Upload Excel Sheet in header Defined Format ";
                }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM