您如何编程检查电子表格是否在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 Box返回的

如果未使用标题下载文件,则上述语句会引发异常。

如果更改hdr = yes;to hdr = no;然后,我很难识别所需的列,如果用户不愿意包含正确的列。

我的代码然后试图将数据加载到数据表中

    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(),
                };

只有当列在正确的位置时,所有这些都起作用。如果他们不在正确的位置,我的想法是向用户显示一条消息以获取正确的信息

有人有任何建议吗?(抱歉,第一次发布问题并仍在学习思考(

我想您正在将电子表格加载到数据表中?很难用一行代码分辨。我将使用DataTable中的列集合,然后检查是否存在您想要的所有列。示例代码以列举下面的列。

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 ";
                }

最新更新