public SubPromptWindow(Logger logger, App app, string subCutxFilePath, IWorkbookSet books, SubassemblyItem item)
            : this(logger, app)
        {
            this.Manager = new PromptsViewModel(subCutxFilePath, item.Width.PropertyValue, item.Height.PropertyValue, item.Depth.PropertyValue, books, logger);

            Init();
        }
        private void LoadBookSubassemblies()
        {
            logger.Debug("开始读取当前产品中的组件清单:");

            Subassemblies.Clear();

            IRange cells = book.Worksheets["Subassemblies"].Cells;

            for (int i = 0; i < cells.Rows.RowCount; i++)
            {
                var row = cells.Rows[i, 0].EntireRow;
                string name = cells.Rows[i, 16].Text;

                if (string.IsNullOrEmpty(name))
                    break;

                SubassemblyItem item = new SubassemblyItem();
                item.Handle = new PropertyElement(row[0, 1]);
                item.Name = new PropertyElement(row[0, 16]);
                item.Qty = new PropertyElement(row[0, 17]);
                item.Width = new PropertyElement(row[0, 18]);
                item.Height = new PropertyElement(row[0, 19]);
                item.Depth = new PropertyElement(row[0, 20]);
                item.XOrigin = new PropertyElement(row[0, 29]);
                item.YOrigin = new PropertyElement(row[0, 30]);
                item.ZOrigin = new PropertyElement(row[0, 31]);
                item.ZRotation = new PropertyElement(row[0, 34]);
                item.RowIndex = i;

                string file = string.Format("{3}\\Subassemblies\\{0}_({1}){2}.cutx",
                                        productHandle,
                                        item.Name.PropertyValue,
                                        i + 1,
                                        project.JobPath);
                if (File.Exists(file))
                {
                    item.IsUnique = true;
                }
                else item.IsUnique = false;

                this.Subassemblies.Add(item);

                logger.Debug(string.Format("读取组件:{0}/{1}/{2}/{3}/{4}/{5}/{6}/{7}/{8}/{9}",
                                           item.Name,
                                           item.Qty,
                                           item.Width,
                                           item.Height,
                                           item.Depth,
                                           item.XOrigin,
                                           item.YOrigin,
                                           item.ZOrigin,
                                           item.ZRotation,
                                           item.Handle));
            }

            logger.Debug("结束读取当前产品中的组件清单。");
        }
        private void AddNewSub(Object obj)
        {
            if (obj is SubassemblyViewModel)
            {
                var sub = obj as SubassemblyViewModel;

                IRange cells = book.Worksheets["Subassemblies"].Cells;

                for (int i = 0; i < cells.Rows.RowCount; i++)
                {
                    string name = cells.Rows[i, 16].Text;
                    var row = cells.Rows[i, 0].EntireRow;

                    //与读取相反,这里是新加入行,所以直到空行才开始写数据
                    if (!string.IsNullOrEmpty(name))
                        continue;

                    row[0, 16].Value = sub.Name;
                    row[0, 17].Value = 1;
                    row[0, 18].Value = 0;
                    row[0, 19].Value = 0;
                    row[0, 20].Value = 0;
                    row[0, 29].Value = 0;
                    row[0, 30].Value = 0;
                    row[0, 31].Value = 0;
                    row[0, 34].Value = 0;

                    SubassemblyItem item = new SubassemblyItem();
                    item.Name = new PropertyElement(row[0, 16]);
                    item.Qty = new PropertyElement(row[0, 17]);
                    item.Width = new PropertyElement(row[0, 18]);
                    item.Height = new PropertyElement(row[0, 19]);
                    item.Depth = new PropertyElement(row[0, 20]);
                    item.XOrigin = new PropertyElement(row[0, 29]);
                    item.YOrigin = new PropertyElement(row[0, 30]);
                    item.ZOrigin = new PropertyElement(row[0, 31]);
                    item.ZRotation = new PropertyElement(row[0, 34]);
                    item.RowIndex = row.Row;
                    item.IsUnique = true;

                    this.Subassemblies.Add(item);

                    CopySubAssemblyFile(sub, row.Row);

                    break;
                }
            }
        }