Пример #1
0
        private bool IdentifyR2FirstColDate(XlsxData xdata, Cells ws, int i, int j)
        {
            if (ws[i, j].Type == CellValueType.IsString)
            {
                if (ws[i, j].StringValue == "")
                {
                    xdata.NoR2Date = false;
                    //这是一个  没有填过日期 的表格。。。
                    R2DateTimeColFound = true;

                    xdata.posR2LastDate = new RCPosition(i, j - 2);
                    xdata.R2LastDate    = ws[i, j - 2].DateTimeValue;
                    return(true);
                }
                else
                {
                    var      strxx = ws[i, j].StringValue;
                    DateTime dt    = new DateTime();
                    try
                    {
                        dt = DateTime.Parse(ws[i, j].StringValue);
                    }
                    catch (Exception)
                    {
                        System.Windows.Forms.MessageBox.Show("日期字符串解析错误");
                        return(false);
                    }
                    //xdata.posR1LastDate = new RCPosition(i, j);
                    //xdata.R1LastDate = dt;
                    //R1DateTimeColFound = true;
                }
            }
            else if (ws[i, j].Type == CellValueType.IsNull)
            {
                if (ws[i, j - 2].Type == CellValueType.IsDateTime)
                {
                    xdata.R2LastDate = ws[i, j - 2].DateTimeValue;
                }
                else
                {
                    DateTime dt = new DateTime();
                    try
                    {
                        dt = DateTime.Parse(ws[i, j - 2].StringValue);
                    }
                    catch (Exception ex)
                    {
                        System.Windows.Forms.MessageBox.Show("日期字符串解析错误");
                        return(false);
                    }
                    xdata.R2LastDate = dt;
                }

                //这是一个  没有填过日期 的表格。。。
                xdata.NoR2Date = false;

                R2DateTimeColFound  = true;
                xdata.posR2LastDate = new RCPosition(i, j - 2);

                return(true);
            }
            else if (ws[i, j].Type == CellValueType.IsDateTime)
            {
                xdata.R2listAllDate.Add(ws[i, j].DateTimeValue);
            }
            else
            {
                //这里还有另一种可能 是日期 类型的 ,但以后再完善
                System.Windows.Forms.MessageBox.Show("文件解析错误");
                return(false);
            }


            return(true);
        }
Пример #2
0
        public bool Analysis(Workbook wb, XlsxData xdata)
        {
            xdata.ExcelFilePath = wb.FileName;
            var  ws = wb.Worksheets[0].Cells;
            bool R1Finish = false, R2Finish = false;

            for (int i = 0; i < ws.Rows.Count; i++)
            {
                if (ws[i, 0].StringValue.Contains("R1"))
                {
                    xdata.R1 = new RCPosition(i, 0);
                    R1Finish = true;
                }

                if (ws[i, 0].StringValue.Contains("R2"))
                {
                    xdata.R2 = new RCPosition(i, 0);
                    R2Finish = true;
                }

                if (R1Finish && R2Finish)
                {
                    break;
                }
            }

            if (!R1Finish || !R2Finish)
            {
                MessageBox.Show("您所选的电子表格文件, 格式不符合 预设格式。\r\n若要修改预设格式请联系 开发人员, 深圳易胜科技有限公司, EasySon \r\n调试信息: 找不到【R1或R2】单元格");
                return(false);
            }


            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            sw.Start();


            int R1WorkerCounter             = 0;
            int R2WorkerCounter             = 0;

            int StepR1 = 3;
            int StepR2 = 3;

            for (int i = 0; i < ws.Rows.Count; i++)
            {
                //它遍历了整个 表格 65535列
                for (int j = 0; j < ws.Columns.Count; j++)
                {
                    //if (sw.ElapsedMilliseconds > 300)
                    //    goto End;

                    if (i == xdata.R1.Row + 1)
                    {
                        if (!R1DateTimeColFound)
                        {
                            if (j == 3)
                            {
                                if (ws[i, j].Type == CellValueType.IsNull)
                                {
                                    xdata.NoR1Date = true;
                                    //这是一个  没有填过日期 的表格。。。
                                    R1DateTimeColFound = true;
                                }
                                else if (ws[i, j].Type == CellValueType.IsString)
                                {
                                    if (ws[i, j].StringValue == "")
                                    {
                                        xdata.NoR1Date = true;
                                        //这是一个  没有填过日期 的表格。。。
                                        R1DateTimeColFound = true;
                                    }
                                    else
                                    {
                                        var      strxx = ws[i, j].StringValue;
                                        DateTime dt    = new DateTime();
                                        try
                                        {
                                            dt = DateTime.Parse(ws[i, j].StringValue);
                                        }
                                        catch (Exception)
                                        {
                                            System.Windows.Forms.MessageBox.Show("文件解析错误");
                                            return(false);
                                        }
                                        //xdata.posR1LastDate = new RCPosition(i, j);
                                        //xdata.R1LastDate = ws[i, j].DateTimeValue;
                                        StepR1 += 2;
                                    }
                                }
                                else if (ws[i, j].Type == CellValueType.IsDateTime)
                                {
                                    if (ws[i, j].DateTimeValue == DateTime.MinValue)
                                    {
                                        xdata.NoR1Date = true;
                                        //这是一个  没有填过日期 的表格。。。
                                        R1DateTimeColFound = true;
                                        goto forEnd;
                                    }
                                    xdata.R1listAllDate.Add(ws[i, j].DateTimeValue);

                                    //xdata.posR1LastDate = new RCPosition(i, j);
                                    //xdata.R1LastDate = ws[i, j].DateTimeValue;
                                    StepR1 += 2;
                                }
                            }
                            else if (j == StepR1)
                            {
                                //这里已更新 ,
                                if (!IdentifyR1FirstColDate(xdata, ws, i, j))
                                {
                                    return(false);
                                }

                                StepR1 += 2;
                            }
                        }
                    }

                    if (i == xdata.R2.Row + 1)
                    {
                        if (!R2DateTimeColFound)
                        {
                            if (j == 3)
                            {
                                if (ws[i, j].Type == CellValueType.IsNull)
                                {
                                    xdata.NoR2Date = true;
                                    //这是一个  没有填过日期 的表格。。。
                                    R2DateTimeColFound = true;
                                }
                                else if (ws[i, j].Type == CellValueType.IsString)
                                {
                                    if (ws[i, j].StringValue == "")
                                    {
                                        xdata.NoR1Date = true;
                                        //这是一个  没有填过日期 的表格。。。
                                        R1DateTimeColFound = true;
                                    }
                                    else
                                    {
                                        var      strxx = ws[i, j].StringValue;
                                        DateTime dt    = new DateTime();
                                        try
                                        {
                                            dt = DateTime.Parse(ws[i, j].StringValue);
                                        }
                                        catch (Exception)
                                        {
                                            System.Windows.Forms.MessageBox.Show("文件解析错误");
                                            return(false);
                                        }
                                        //xdata.posR1LastDate = new RCPosition(i, j);
                                        //xdata.R1LastDate = ws[i, j].DateTimeValue;
                                        StepR2 += 2;
                                    }
                                }
                                else if (ws[i, j].Type == CellValueType.IsDateTime)
                                {
                                    if (ws[i, j].DateTimeValue == DateTime.MinValue)
                                    {
                                        xdata.NoR2Date = true;
                                        //这是一个  没有填过日期 的表格。。。
                                        R2DateTimeColFound = true;
                                        goto forEnd;
                                    }

                                    xdata.R2listAllDate.Add(ws[i, j].DateTimeValue);
                                    //xdata.posR1LastDate = new RCPosition(i, j);
                                    //xdata.R1LastDate = ws[i, j].DateTimeValue;
                                    StepR2 += 2;
                                }
                            }
                            else if (j == StepR2)
                            {
                                //这里已更新 ,
                                if (!IdentifyR2FirstColDate(xdata, ws, i, j))
                                {
                                    return(false);
                                }

                                StepR2 += 2;
                            }
                        }
                    }
                    //确认穴号个数

                    if (R2DateTimeColFound && R1DateTimeColFound)
                    {
                        goto forEnd;
                    }
                }
            }

            if (!R1DateTimeColFound && !R2DateTimeColFound)
            {
                MessageBox.Show("您所选的电子表格文件, 格式不符合 预设格式,日期单元格审核不通过");
                return(false);
            }

forEnd:


            for (int i = 0; i < ws.Rows.Count; i++)
            {
                if (i >= xdata.R1.Row + 3 && i < xdata.R2.Row)
                {
                    if (ws[i, 0].StringValue.Trim() == (R1WorkerCounter + 1) + "#")
                    {
                        R1WorkerCounter++;

                        xdata.listR1穴号.Add(new RCPosition(i, 0));
                        //因为结尾会i++;
                        i += 5;
                    }
                }
                else if (i >= xdata.R2.Row + 3 && i < 200)
                {
                    if (ws[i, 0].StringValue.Trim() == (R2WorkerCounter + 1) + "#")
                    {
                        R2WorkerCounter++;
                        xdata.listR2穴号.Add(new RCPosition(i, 0));
                        //因为结尾会i++;
                        i += 5;
                    }
                }
            }

            if (xdata.listR1穴号.Count == 0)
            {
                MessageBox.Show("您所选的电子表格文件, 格式不符合 预设格式\r\n若要修改预设格式请联系 开发人员, 深圳易胜科技有限公司, EasySon ;\r\n调试信息: R1穴号 单元格 为0个 ");
                return(false);
            }
            if (xdata.listR2穴号.Count == 0)
            {
                MessageBox.Show("您所选的电子表格文件, 格式不符合 预设格式\r\n若要修改预设格式请联系 开发人员, 深圳易胜科技有限公司, EasySon ;\r\n调试信息: R2穴号 单元格 为0个");
                return(false);
            }

            if (frm.DebugMode)
            {
                MessageBox.Show("excel布局校验成功");
            }

            return(true);
        }