Example:Import sales journal from excel by code

  1 //生成导入模板
  2 void creatTemplate()
  3 {
  4     SysExcelApplication m_application;
  5     SysExcelWorkbooks   m_workbooks;
  6     SysExcelWorkbook    m_workbook;
  7     SysExcelWorksheets  m_worksheets;
  8     SysExcelWorksheet   m_worksheet;
  9     SysExcelCells       m_cells;
 10     int                 m_row = 1;
 11     ;
 12 
 13     m_application = SysExcelApplication::construct();
 14     m_workbooks   = m_application.workbooks();
 15     m_workbook    = m_workbooks.add();
 16     m_worksheets  = m_workbook.worksheets();
 17     m_worksheet   = m_worksheets.itemFromNum(1);
 18     m_cells       = m_worksheet.cells();
 19 
 20     m_cells.item(1,1).value("Item number");
 21     m_cells.item(1,2).value("Config number");
 22     m_cells.item(1,3).value("Sales quantity");
 23 
 24     m_worksheet.name("CustomsReport");
 25     m_worksheet.columns().item(2).autoFit();
 26     m_application.visible(true);
 27 }
 28 
 29 //导入数据
 30 void clicked()
 31 {
 32     SysExcelApplication             Excel;
 33     SysExcelWorkbooks               Books;
 34     SysExcelWorkbook                Book;
 35     SysExcelWorksheets              Sheets;
 36     SysExcelWorksheet               Sheet;
 37     SysExcelCells                   Cells;
 38     SysExcelCell                    Cell;
 39     SysExcelStyles                  Styles;
 40     SysExcelStyle                   Style;
 41     int                             RowCount,RecNum,n,i;
 42 
 43     Filename                        _FilenameOpen;
 44     InventTable                     InventTable;
 45     ConfigTable                     ConfigTable;
 46     BomVersion                      BomVersion;
 47     InventDim                       t_InventDim;
 48     InventBatch                     t_InventBatch;
 49     InventStdPic                    t_InventStdPic;
 50 
 51     str                             a_ItemId[],a_ConfigId[];
 52     real                            a_Qty[];
 53 
 54     ItemId                          ItemId;
 55     Qty                             Qty;
 56     ConfigId                        ConfigId;
 57 
 58     Boolean                         isContinue = true,isBlocked;
 59 
 60     Dialog                          _Dialog;
 61     DialogField                     dlgPath;
 62     System.Exception                ex;
 63     #WINAPI
 64     FileNameFilter                  filter = ['Excel Files','*.xls;*.xlsx'];//['Image Files','*.bmp;*.jpg;*.gif;*.jpeg'];
 65     ;
 66 
 67     if(!SalesLine.ItemId)
 68         SalesLine_DS.delete();
 69     try
 70     {
 71         if(!box::yesNo("Do you have import Excel template?",DialogButton::No,'Import template'))
 72         {
 73             this.creatTemplate();
 74             return;
 75         }
 76         _FilenameOpen = Winapi::getOpenFileName(element.hWnd(),filter,WinAPI::getFolderPath(#CSIDL_Personal), "@SYS53008", '','');
 77         if(!_FilenameOpen)
 78             return ;
 79         if(!box::yesNo("Are you sure Import to AX 2009?",DialogButton::No,'Import to AX2009'))
 80             return ;
 81 
 82         Excel = SysExcelApplication::construct();
 83         Books = Excel.workbooks();
 84         Books.open(_FilenameOpen,true);
 85 
 86         Book   = Books.item(1);
 87         Sheets = Book.worksheets();
 88         Sheet  = Sheets.itemFromNum(1);
 89         Cells  = Sheet.cells();
 90 
 91         RowCount =   2;     //from second line fect data
 92 
 93         for(RowCount = 2;Cells.item(RowCount,1).value().bStr() != "";RowCount++)
 94         {
 95             n = 1;
 96 
 97             ItemId   = Cells.item(RowCount,n).value().bStr();    n++;
 98             ConfigId = Cells.item(RowCount,n).value().bStr();    n++;
 99             Qty      = Cells.item(RowCount,n).value().double();
100 
101             InventTable = InventTable::find(ItemId);
102             if(InventTable)
103             {
104                 //if(InventTable.QVS_ItemBlock)
105                 //    isBlocked  = true;
106                 if(isBlocked)
107                 {
108                     isContinue = false;
109                     info(strfmt("Item number %1 is blocked!",ItemId));
110                 }
111                 select firstonly t_InventStdPic
112                     where t_InventStdPic.ItemId == InventTable.ItemId;
113                 if(!t_InventStdPic)
114                 {
115                     isContinue = false;
116                     info(strfmt("Item number %1 has no picture!",ItemId));
117                 }
118 
119                 select firstonly ConfigTable
120                     where ConfigTable.ItemId == InventTable.ItemId;
121 
122                 if(ConfigTable)
123                 {
124                     ConfigTable = ConfigTable::find(ItemId,ConfigId);
125                     select firstonly BomVersion
126                         where  BomVersion.BOMId     == ConfigTable.BOMId
127                             && BomVersion.ItemId    == ItemId
128                             //&& BomVersion.Active    == noYes::Yes
129                             && BomVersion.Approved  == noYes::Yes;
130                     if(!ConfigTable)
131                     {
132                         isContinue = false;
133                         info(strfmt("Item number %1 has no configId %2!",ItemId,ConfigId));
134                     }
135                     if(ConfigTable.DisUsed)
136                     {
137                         isContinue = false;
138                         info(strfmt("Item number %1's Config id %2 is 'DisUse'!",ItemId,ConfigId));
139                     }
140                     //if(!BomVersion)
141                     //{
142                     //    isContinue = false;
143                     //    info(strfmt("Item number %1's BOM version %2 is DisUse''!",ItemId,ConfigTable.BOMId));
144                     //}
145                 }
146             }
147             else
148             {
149                 isContinue = false;
150                 info(strfmt("Item number %1 can't been found!",ItemId,ConfigId));
151             }
152 
153             if(!isContinue)
154             {
155                 isContinue = true;
156                 continue;
157             }
158 
159             if(ItemId && Qty)
160             {
161                 RecNum++;
162 
163                 a_ItemId[RecNum]   = ItemId;
164                 a_ConfigId[RecNum] = ConfigId;
165                 a_Qty[RecNum]      = Qty;
166             }
167         }
168     }
169     catch(Exception::CLRError)
170     {
171         Excel.quit();
172         ex = CLRInterop::getLastException();
173         while( ex )
174         {
175             info( ex.get_Message() );
176             ex = ex.get_InnerException();
177         }
178     }
179     catch(Exception::Error)
180     {
181         Excel.quit();
182         global::exceptionTextFallThrough();
183     }
184     Excel.quit();
185 
186     info("------------------------------------------------");
187     for(i = 1;i <= RecNum;i++)
188     {
189         SalesLine_DS.create();
190         //SalesLine.InventDimId
191         SalesLine.ItemId      = strupr(a_ItemId[i]);
192 
193         t_InventBatch.clear();
194         select firstonly t_InventBatch
195             where t_InventBatch.itemId  == SalesLine.ItemId  &&
196                  (t_InventBatch.expDate == datenull()       ||
197                   t_InventBatch.expDate >= today());
198 
199         t_InventDim.clear();
200         t_InventDim.initValue();
201         t_InventDim.configId         = a_ConfigId[i];
202         t_InventDim.inventBatchId    = t_InventBatch.inventBatchId;
203         t_InventDim.InventLocationId = "FPW";
204 
205         SalesLine.InventDimId        = InventDim::findOrCreate(t_InventDim).inventDimId;
206         SalesLine.SalesQty           = a_Qty[i];
207 
208         SalesLine_DS.itemIdModified(); //这里面的逻辑非常重要
209         SalesLine_DS.Write();
210 
211         //info(strfmt("%1: %2",a_ItemId[i],a_Qty[i]));
212     }
213 
214     info(strfmt("Import into total of %1 records!",RecNum));
215 
216     SalesLine_ds.executeQuery();
217     SalesLine_ds.research();
218 }
原文地址:https://www.cnblogs.com/Jinnchu/p/2663990.html