public double Thick(IWorkbook bookM, out Material material, List<Material> tempMaterials, List<ModelError> errors)
        {
            string materialText = range[0, 21].Text;
            string thickText = range[0, 20].Text;

            material = null;
            bool isFakeMaterial = false;

            //检查材料列是否有数据
            string name = materialText;
            if (string.IsNullOrEmpty(name.Trim()))
            {
                errors.Add(new ModelError("Part material should not be blank!"));
                material = null;//没有材料名称,赋予null
                return 0;
            }

            if (name.StartsWith("-"))
            {
                isFakeMaterial = true;
                name = name.Substring(0);
            }

            //从缓存中查找是否有数据
            var m = tempMaterials.Find(it => it.Name.ToUpper() == name.ToUpper());
            if (m != null)
            {
                double value = m.Thickness;
                if (value <= 0)
                {
                    errors.Add(new ModelError(string.Format("Material [{0}] not found", materialText)));
                }
                material = m;
            }
            //缓存中没有数据
            else
            {
                bool findit = false;
                //根据材料名称,再到M中查找材料
                for (int i = 1; i < 4; i++)
                {
                    if (findit)
                    {
                        break;
                    }

                    var sheet = bookM.Worksheets[i];

                    for (int r = 0; r < sheet.Cells.Rows.RowCount; r++)
                    {
                        string _name = sheet.Cells.Rows[r, 0].Text;

                        if (_name == "deleted")
                        {
                            continue;
                        }//标记被删除的材料

                        if (string.IsNullOrEmpty(_name.Trim()))
                        {
                            if (i == 3)//到最后一张表的时候,表示还没找到,那就说明这个材料在M中没有,就记录一下
                            {
                                material = new Material(name, 0);
                                tempMaterials.Add(material);
                            }
                            break;
                        }

                        if (_name.ToUpper() == name.ToUpper())
                        {
                            material = getMaterial(sheet.Cells.Rows[r, 1].EntireRow, errors);
                            tempMaterials.Add(material);
                            findit = true;
                            break;
                        }
                    }
                }
            }

            //根据以上逻辑,这里material不能为null
            material.IsFake = isFakeMaterial;
            if (material.Thickness <= 0)
            {
                return 0;
            }
            else
            {
                //判断厚度列是否有数据
                if (string.IsNullOrEmpty(thickText.Trim()))
                {
                    return material.Thickness;
                }
                else
                {
                    return GetDoubleValue(thickText, "Material Thickness(U)", true, errors);
                }
            }
        }
 internal void IsMaterialFitPartLengthAndWidth(double length, double width, Material material, List<ModelError> errors)
 {
     if (!material.HasFitStock(length, width))
     {
         //this.writeError(string.Format("材料[{0}]没有足够的尺寸容纳板件{1}/{2}", material.Name, length, width), "板件材料");
     }
 }
        private Material getMaterial(IRange entireRow, List<ModelError> errors)
        {
            string name = entireRow[0, 0].Text;
            double thick = GetDoubleValue(entireRow[0, 1].Text, "Material thickness", true, errors);

            Grain grain = Grain.None;
            if (string.IsNullOrEmpty(entireRow[0, 2].Text.Trim()))
            {
                grain = Grain.None;
            }
            else
            {
                grain = (Grain)GetIntValue(entireRow[0, 2].Text, "材料纹理", true, errors);
            }
            Material material = new Material(name, thick);
            material.Grain = grain;

            for (int i = 9; i < 10; i += 9)
            {
                if (string.IsNullOrEmpty(entireRow[0, i].Text.Trim()))
                {
                    break;
                }

                Stock stock = Stock.Default;
                stock.Qty = GetIntValue(entireRow[0, i].Text, "材料库存数量", true, errors);
                stock.Price = GetDoubleValue(entireRow[0, i + 3].Text, "材料单价", true, errors);
                stock.Width = GetDoubleValue(entireRow[0, i + 1].Text, "材料宽度", true, errors);
                stock.Length = GetDoubleValue(entireRow[0, i + 2].Text, "材料长度", true, errors);
                stock.TopTrimValue = GetDoubleValue(entireRow[0, i + 4].Text, "材料上修边", true, errors);
                stock.BottomTrimValue = GetDoubleValue(entireRow[0, i + 5].Text, "材料下修边", true, errors);
                stock.LeftTrimValue = GetDoubleValue(entireRow[0, i + 6].Text, "材料左修边", true, errors);
                stock.RightTrimValue = GetDoubleValue(entireRow[0, i + 7].Text, "材料友修边", true, errors);

                material.Stocks.Add(stock);
            }

            return material;
        }