Beispiel #1
0
        private void generateLabelSheet(_Workbook workbook)
        {
            Microsoft.Office.Interop.Excel._Worksheet labelSheet = null;
            Microsoft.Office.Interop.Excel._Worksheet calcSheet  = null;


            System.Data.DataTable labelDt = getLabelDataFromView();

            if (labelDt.Rows.Count > 0)
            {
                labelDt.Columns.Add("OTH_REF");
                labelDt.Columns.Add("OLD_ITEM");
                labelDt.Columns.Add("BOXCODE");
                labelDt.Columns.Add("MOGNBR1");
                labelDt.Columns.Add("ENGDES");
                labelDt.Columns.Add("SPNDES");
                labelDt.Columns.Add("GERDES");
                labelDt.Columns.Add("LBLCODE");
                labelDt.Columns.Add("LBLTYPE");
                labelDt.Columns.Add("LBLSTYE");
                labelDt.Columns.Add("OENBR1");
                labelDt.Columns.Add("OENBR2");
                labelDt.Columns.Add("OENBR3");
                labelDt.Columns.Add("OENBR4");
                labelDt.Columns.Add("OENBR5");
                labelDt.Columns.Add("OENBR6");
                labelDt.Columns.Add("OENBR7");
                labelDt.Columns.Add("OENBR8");
                labelDt.Columns.Add("OENBR9");
                labelDt.Columns.Add("OENBR10");
                labelDt.Columns.Add("MOGNBR2");
                labelDt.Columns.Add("TPFNBR1");
                labelDt.Columns.Add("TPFNBR2");
                labelDt.Columns.Add("TRWNBR1");
                labelDt.Columns.Add("TRWNBR2");
                labelDt.Columns.Add("DANNBR1");
                labelDt.Columns.Add("DANNBR2");
                labelDt.Columns.Add("MCQNBR1");
                labelDt.Columns.Add("MCQNBR2");
                labelDt.Columns.Add("DESC1");
                labelDt.Columns.Add("DESC2");
                labelDt.Columns.Add("DESC3");
                labelDt.Columns.Add("DESC4");
                labelDt.Columns.Add("DESC5");
                labelDt.Columns.Add("DESC6");
                labelDt.Columns.Add("DESC7");
                labelDt.Columns.Add("DESC8");
                labelDt.Columns.Add("DESC9");
                labelDt.Columns.Add("DESC10");
                labelDt.Columns.Add("QRCODE");
                labelDt.Columns.Add("HBSQRCODE");

                var rfcGetPackingFM = rfcRepo.CreateFunction(getLabelData);

                for (int i = 0; i <= labelDt.Rows.Count - 1; i++)
                {
                    var nbr   = labelDt.Rows[i]["NBR"];
                    var posnr = labelDt.Rows[i]["POSNR"].ToString();

                    rfcGetPackingFM.SetValue("P_VBELN", nbr);   //訂單號碼
                    rfcGetPackingFM.SetValue("P_POSNR", posnr); //訂單項次

                    rfcGetPackingFM.Invoke(rfcDest);

                    IRfcTable ITAB = rfcGetPackingFM.GetTable("ITAB");
                    if (ITAB.CurrentIndex == 0)
                    {
                        //只取第一列
                        ITAB.CurrentIndex           = 0;
                        labelDt.Rows[i]["OTH_REF"]  = ITAB.GetString("KDMAT");
                        labelDt.Rows[i]["OLD_ITEM"] = ITAB.GetString("BISMT");
                        labelDt.Rows[i]["OENBR1"]   = ITAB.GetString("OENBR1");
                        labelDt.Rows[i]["OENBR2"]   = ITAB.GetString("OENBR2");
                        labelDt.Rows[i]["OENBR3"]   = ITAB.GetString("OENBR3");
                        labelDt.Rows[i]["OENBR4"]   = ITAB.GetString("OENBR4");
                        labelDt.Rows[i]["OENBR5"]   = ITAB.GetString("OENBR5");
                        labelDt.Rows[i]["OENBR6"]   = ITAB.GetString("OENBR6");
                        labelDt.Rows[i]["OENBR7"]   = ITAB.GetString("OENBR7");
                        labelDt.Rows[i]["OENBR8"]   = ITAB.GetString("OENBR8");
                        labelDt.Rows[i]["OENBR9"]   = ITAB.GetString("OENBR9");
                        labelDt.Rows[i]["OENBR10"]  = ITAB.GetString("OENBR10");
                        labelDt.Rows[i]["MOGNBR1"]  = ITAB.GetString("MOGNBR1");
                        labelDt.Rows[i]["MOGNBR2"]  = ITAB.GetString("MOGNBR2");
                        labelDt.Rows[i]["TPFNBR1"]  = ITAB.GetString("TPFNBR1");
                        labelDt.Rows[i]["TPFNBR2"]  = ITAB.GetString("TPFNBR2");
                        labelDt.Rows[i]["TRWNBR1"]  = ITAB.GetString("TRWNBR1");
                        labelDt.Rows[i]["TRWNBR2"]  = ITAB.GetString("TRWNBR2");
                        labelDt.Rows[i]["DANNBR1"]  = ITAB.GetString("DANNBR1");
                        labelDt.Rows[i]["DANNBR2"]  = ITAB.GetString("DANNBR2");
                        labelDt.Rows[i]["MCQNBR1"]  = ITAB.GetString("MCQNBR1");
                        labelDt.Rows[i]["MCQNBR2"]  = ITAB.GetString("MCQNBR2");
                        labelDt.Rows[i]["ENGDES"]   = ITAB.GetString("ENGDES");
                        labelDt.Rows[i]["SPNDES"]   = ITAB.GetString("SPNDES");
                        labelDt.Rows[i]["GERDES"]   = ITAB.GetString("GERDES");
                        labelDt.Rows[i]["DESC1"]    = ITAB.GetString("DESC1");
                        labelDt.Rows[i]["DESC2"]    = ITAB.GetString("DESC2");
                        labelDt.Rows[i]["DESC3"]    = ITAB.GetString("DESC3");
                        labelDt.Rows[i]["DESC4"]    = ITAB.GetString("DESC4");
                        labelDt.Rows[i]["DESC5"]    = ITAB.GetString("DESC5");
                        labelDt.Rows[i]["DESC6"]    = ITAB.GetString("DESC6");
                        labelDt.Rows[i]["DESC7"]    = ITAB.GetString("DESC7");
                        labelDt.Rows[i]["DESC8"]    = ITAB.GetString("DESC8");
                        labelDt.Rows[i]["DESC9"]    = ITAB.GetString("DESC9");
                        labelDt.Rows[i]["DESC10"]   = ITAB.GetString("DESC10");
                        labelDt.Rows[i]["BOXCODE"]  = ITAB.GetString("BOXCODE");
                        labelDt.Rows[i]["LBLCODE"]  = ITAB.GetString("LBLCODE");
                        labelDt.Rows[i]["LBLTYPE"]  = ITAB.GetString("LBLTYPE");
                        labelDt.Rows[i]["LBLSTYE"]  = ITAB.GetString("LBLSTYE");

                        if ((ITAB.GetString("QRCODE") == null) || (ITAB.GetString("QRCODE") == "") || (ITAB.GetString("QRCODE") == " "))
                        {
                            labelDt.Rows[i]["QRCODE"]    = "";
                            labelDt.Rows[i]["HBSQRCODE"] = "";
                        }
                        else
                        {
                            labelDt.Rows[i]["QRCODE"]    = ITAB.GetString("QRCODE");
                            labelDt.Rows[i]["HBSQRCODE"] = labelDt.Rows[i]["QRCODE"].ToString() + labelDt.Rows[i]["CUS_ITEM"].ToString();
                        }
                    }
                }

                BindingSource bs = new BindingSource();
                bs.DataSource         = labelDt.DefaultView;
                dgvPacking.DataSource = null;

                dgvPacking.DataSource = bs;

                foreach (DataGridViewColumn column in dgvPacking.Columns)
                {
                    //表頭選擇
                    column.HeaderCell = new DataGridViewAutoFilterColumnHeaderCell(column.HeaderCell);

                    //禁止排序
                    column.SortMode = DataGridViewColumnSortMode.NotSortable;
                }

                labelSheet      = workbook.Sheets["工作表2"];
                labelSheet.Name = "標籤明細";
                labelSheet.Select();

                //計算 dataGrid 的欄列數
                string maxCols = GetStandardExcelColumnName(dgvPacking.Columns.Count);
                string maxRows = dgvPacking.Rows.Count.ToString();

                //將 datagrid 填入 excel 中
                //填上標題列
                for (int i = 1; i < dgvPacking.Columns.Count + 1; i++)
                {
                    labelSheet.Cells[1, i] = dgvPacking.Columns[i - 1].HeaderText;
                }

                //宣告 datagrid 沒有標題列
                dgvPacking.RowHeadersVisible = false;

                //將資料從 datagrid 貼到 object
                dgvPacking.SelectAll();
                DataObject dataObj = dgvPacking.GetClipboardContent();
                if (dataObj != null)
                {
                    Clipboard.SetDataObject(dataObj);
                }

                //將 object 傳給 workbook
                labelSheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1);

                //將資料貼入第二列 (第一列是標題列)
                labelSheet = workbook.ActiveSheet;

                //資料格式化
                labelSheet.get_Range("A1", "BZ" + maxRows).NumberFormat = "@";

                labelSheet.Application.Goto(labelSheet.Range["A2"], true);

                //從剪貼薄貼上
                labelSheet.PasteSpecial(Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);

                //將 worksheet 複製一份到 calcsheet
                labelSheet.Copy(Type.Missing, workbook.Sheets[workbook.Sheets.Count]);

                // 複製的 sheet 更名
                workbook.Sheets[workbook.Sheets.Count].Name = "計算張數";

                //選取 calcSheet
                calcSheet = workbook.Sheets[workbook.Sheets.Count];

                //刪掉不要的部份
                calcSheet.Range["A1:I" + maxRows].Delete();
                calcSheet.Range["B1:" + maxCols + maxRows].Delete();

                //去除重覆料號
                calcSheet.Range["A1:A" + maxRows].RemoveDuplicates(1);
                calcSheet.UsedRange.NumberFormat = "General";
                calcSheet.Range["A1"].Value      = "料號";
                calcSheet.Range["B1"].Value      = "張數";

                //求有值的最大列數
                int calcsheetMaxRows = calcSheet.Range["A1"].Offset[calcSheet.Rows.Count - 1, 0].End[Microsoft.Office.Interop.Excel.XlDirection.xlUp].Row;

                calcSheet.Range["B2"].Value = "=COUNTIF(標籤明細!J:J,A2)";

                //將公式往下複製
                calcSheet.Range["B2"].Copy(calcSheet.Range["B3:B" + calcsheetMaxRows]);

                //刪掉多的工作表
                //workbook.Sheets["工作表2"].Delete();
            }
            else
            {
                MessageBox.Show("標籤明細沒有資料", "錯誤");
            }
        }
Beispiel #2
0
        private void generatePackingSheet(_Workbook workbook)
        {
            Microsoft.Office.Interop.Excel._Worksheet packingSheet = null;

            packingSheet      = workbook.Sheets["工作表1"];
            packingSheet      = workbook.ActiveSheet;
            packingSheet.Name = "訂單包裝明細";

            int packingKeyRow      = 1;
            int orderNumRow        = 2;
            int cusNumRow          = 3;
            int cusNameRow         = 4;
            int estDeliveryDateRow = 5;

            int firstColumnNum        = 1;
            int lastVisbleColumnCount = 17;
            int itemHeaderRowStart    = 7;
            int itemBodyRowStart      = 8;
            int columnNum;

            // 將包裝單號,放置於工作表左上角,[第一列,第一行]
            packingSheet.Cells[packingKeyRow, firstColumnNum]      = "包裝單號: " + packingKey;
            packingSheet.Cells[orderNumRow, firstColumnNum]        = lblOrderNum.Text;
            packingSheet.Cells[cusNumRow, firstColumnNum]          = lblCusNum.Text;
            packingSheet.Cells[cusNameRow, firstColumnNum]         = lblCusName.Text;
            packingSheet.Cells[estDeliveryDateRow, firstColumnNum] = lblEstDeliveryDate.Text;

            // 計算項目資料筆數,lastVisbleColumnCount 是允許出貨組看到的最大欄位數
            itemCount = itemCount + lastVisbleColumnCount + dgvPacking.Rows.Count;

            //  excel 資料全部轉為文字
            packingSheet.Columns.EntireColumn.NumberFormat = "@";

            int itemDetailRowStart = itemHeaderRowStart + 1;
            int textRowStart       = itemDetailRowStart + dgvPacking.Rows.Count + 1;


            //表頭
            for (int i = 0; i <= lastVisbleColumnCount; i++)
            {
                columnNum = i + 1;
                packingSheet.Cells[itemHeaderRowStart, columnNum] = dgvPacking.Columns[i].HeaderText;
            }

            //項目
            //宣告 datagrid 沒有標題列
            dgvPacking.RowHeadersVisible = false;

            //將資料從 datagrid 貼到 object
            dgvPacking.SelectAll();

            DataObject dobj = dgvPacking.GetClipboardContent();

            if (dobj != null)
            {
                Clipboard.SetDataObject(dobj);
            }

            //將 object 傳給 workbook
            packingSheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1);

            //將資料貼入第七列 (前面是表頭資訊)
            Microsoft.Office.Interop.Excel.Range itemRangeStart = (Microsoft.Office.Interop.Excel.Range)packingSheet.Cells[itemBodyRowStart, firstColumnNum];
            itemRangeStart.Select();

            //從剪貼薄貼上
            packingSheet.PasteSpecial(itemRangeStart, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);

            //清除不需要資料的欄位
            packingSheet.Range["S" + itemBodyRowStart + ":AL" + dgvPacking.Rows.Count + itemBodyRowStart].Clear();

            int borderRange = dgvPacking.Rows.Count + itemHeaderRowStart;

            for (int i = itemHeaderRowStart; i < borderRange; i++)
            {
                //標註列,加上底線
                packingSheet.Range["A" + i + ":R" + i].Borders[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
            }

            //內文
            for (int s = 0; s < lbSalesText.Items.Count; s++)
            {
                packingSheet.Cells[s + textRowStart, 1] = lbSalesText.Items[s].ToString();
            }
            packingSheet.Cells.EntireColumn.AutoFit(); //自動調整欄寬
            ((Microsoft.Office.Interop.Excel.Range)packingSheet.Columns["A:B", System.Type.Missing]).ColumnWidth = 8;
        }