Excel import and export

Hi all,

I’m trying to insert and activate an item with price from excel and when the item from the excel is not present in the item table i need to export the items into excel from ax…

Here is my code importing is fine but exporting is not happening…

void clicked()
{
    SysExcelApplication             application,app1;
    SysExcelWorkbooks               workbooks,wbooks;
    SysExcelWorkbook                workbook,wbook;
    SysExcelWorksheets              worksheets,wsheets;
    SysExcelWorksheet               worksheet,wsheet;
    SysExcelCells                   cells,cells1;
    SysExcelCell                    cell;
    COMVariantType                  type;
    System.DateTime                 ShlefDate;
    FilenameOpen                    filename;
    dialogField                     dialogFilename;
    Dialog                          dialog;

    //Table Declarations Starts
    InventItemPrice                 inventprice;
    InventDim                       _inventdim;
    InventParameters                inp;
    InventTableModule               inm,inventTableModule;
    InventItemPriceSim              iips,inventItemPriceSimulated;
    InventTable                     _inventtable;

    //Table Declartions Ends

    //field declaration
    ItemId                          _itemid;
    CostingVersionId                _versionid;
    CostingVersionPriceType         _type;
    Price                           _price;
    PriceUnit                       _unit;
    CostingVersionId                _version;
    InventDimId                     _invent;
    InventSiteId                    _site;
    TransDate                       _fromdate;
    InventItemCostingType           _costingType;
    int                             row,row1;

    #OCCRetryCount
    #Excel

    // convert into str from excel cell value

    str COMVariant2Str(COMVariant _cv, int _decimals = 0, int _characters = 0, int _separator1 = 0, int _separator2 = 0)
    {
    switch (_cv.variantType())
    {
    case (COMVariantType::VT_BSTR):
    return _cv.bStr();

    case (COMVariantType::VT_R4):
    return num2str(_cv.float(),_characters,_decimals,_separator1,_separator2);

    case (COMVariantType::VT_R8):
    return num2str(_cv.double(),_characters,_decimals,_separator1,_separator2);

    case (COMVariantType::VT_DECIMAL):
    return num2str(_cv.decimal(),_characters,_decimals,_separator1,_separator2);

    case (COMVariantType::VT_DATE):
    return date2str(_cv.date(),123,2,1,2,1,4);

    case (COMVariantType::VT_EMPTY):
    return "";

    default:
    throw error(strfmt("@SYS26908", _cv.variantType()));
    }
    return "";
    }
    ;

    dialog              =   new Dialog("Excel Upoad");
    dialogFilename      =   dialog.addField(typeId(FilenameOpen));
    dialog.filenameLookupTitle("Upload from Excel");
    dialog.caption("Sales Price Excel Upload");
    dialogFilename.value(filename);
    if(!dialog.run())
    return;
    filename            =   dialogFilename.value();
    application         =   SysExcelApplication::construct();
    workbooks           =   application.workbooks();
    try
    {
        workbooks.open(filename);
    }
    catch (Exception::Error)
    {
        throw error("File cannot be opened.");
    }

    workbook            =   workbooks.item(1);
    worksheets          =   workbook.worksheets();
    worksheet           =   worksheets.itemFromNum(1);
    cells               =   worksheet.cells();

    try
    {
    ttsbegin;
    do
    {
        row++;
        _itemid           =   COMVariant2Str(cells.item(row, 1).value());
        _price            =   cells.item(row, 2).value().double();
        _site             =   COMVariant2Str(cells.item(row, 3).value());

        select Costingversionid from inp;
        _versionid=inp.Costingversionid;
        breakpoint;
        if(row > 1)
        {
            select firstonly iips;
            if(iips.ItemId==_itemid)
            {
                    iips.ItemId=_itemid;
                    iips.VersionId=_versionid;
                    iips.PriceType=CostingVersionPriceType::Sales;
                    _inventdim.InventSiteId=_site;
                    iips.InventDimId=InventDim::findOrCreate(_inventdim).inventDimId;
                    iips.Price=_price;
                    iips.PriceUnit=1;
                    iips.FromDate=systemdateget();
                    iips.insert();
                    InventItemPriceActivationJob::activateInventItemPriceSimExt(iips);
                    info(strfmt("Items inserted successfully for %1",iips.ItemId));
          }
          else
          {
                info(strfmt(" Items not inserted for %1",_itemid));
                app1 = SysExcelApplication::construct();
                wbooks = app1.workbooks(); //gets the workbook object
                wbook = workbooks.add();  // creates a new workbook
                wsheets = workbook.worksheets(); //gets the worksheets object
                wsheet = worksheets.itemFromNum(1);//Selects the first worksheet in the workbook to insert data
                cells1 = worksheet.cells();
                cells1.range('A:A').numberFormat('@');
                cell=cells1.item(row,1);
                cell.value(_itemid);
                cell=cells1.item(row,2);
                cell.value(_price);
                cell=cells1.item(row,3);
                cell.value(_site);
                app1.visible(true);
          }

        }
        type = cells.item(row+1, 1).value().variantType();
        }while (type != COMVariantType::VT_EMPTY);
        application.quit();
        ttscommit;

        }
        catch
        {
            Error("Upload Failed");
        }
}

How could i export the error items ?

thanks

 if(row > 1)
        {
            select firstonly iips;
            if(iips.ItemId==_itemid)
            {
                    iips.ItemId=_itemid;
                    iips.VersionId=_versionid;
                    iips.PriceType=CostingVersionPriceType::Sales;
                    _inventdim.InventSiteId=_site;
                    iips.InventDimId=InventDim::findOrCreate(_inventdim).inventDimId;
                    iips.Price=_price;
                    iips.PriceUnit=1;
                    iips.FromDate=systemdateget();
                    iips.insert();
                    InventItemPriceActivationJob::activateInventItemPriceSimExt(iips);
                    info(strfmt("Items inserted successfully for %1",iips.ItemId));
          }
          else
          {
              
                 fileName1 = "Libraries\Documents\Test.xlsx";
                    xlsApplication           = SysExcelApplication::construct();
                //Open Excel document
                    xlsApplication.visible(true);
                //Create Excel WorkBook and WorkSheet
                    xlsWorkBookCollection    = xlsApplication.workbooks();
                   xlsWorkBook              = xlsWorkBookCollection.add();
                   xlsWorkSheetCollection   = xlsWorkBook.worksheets();
                   xlsWorkSheet             = xlsWorkSheetCollection.itemFromNum(1);
                   //Excel columns captions
                   xlsWorkSheet.cells().item(row,1).value("Item");
                   xlsWorkSheet.cells().item(row,2).value("Price");
                   row++;

                      xlsWorkSheet.cells().item(row,1).value(_itemid);
                      xlsWorkSheet.cells().item(row,2).value(_price);

                   //Check whether the document already exists
                   if(WinApi::fileExists(fileName))
                      WinApi::deleteFile(fileName);
                   //Save Excel document
                   xlsWorkbook.saveAs(fileName);
                   //Open Excel document
                   xlsApplication.visible(true);
                   //Close Excel
                   xlsApplication.quit();
                   xlsApplication.finalize();

          }

When I try like this items getting exported to excel but showing an error

pastedimage1525426441065v1.png

I think Problem is with File Path for export. Give the correct file path and then try it again. One more thing i noticed that your using the ttsBegin and Commit in wrong places. you may get commit error on the table. Use both of them inside the if loop.

Is there any way to do exporting the error items?

if(row > 1)
                 {
                     select firstonly iips where iips.ItemId==_itemid;
                     if(iips)
                    {
                    iips.ItemId=_itemid;
                    iips.VersionId=_versionid;
                    iips.PriceType=CostingVersionPriceType::Sales;
                    _inventdim.InventSiteId=_site;
                    iips.InventDimId=InventDim::findOrCreate(_inventdim).inventDimId;
                    iips.Price=_price;
                    iips.PriceUnit=1;
                    iips.FromDate=systemdateget();
                    iips.insert();
                    InventItemPriceActivationJob::activateInventItemPriceSimExt(iips);
                    info(strfmt("Items inserted successfully for %1",iips.ItemId));
                    }

          else
          {
                   xlsApplication           = SysExcelApplication::construct();
                   xlsWorkBookCollection    = xlsApplication.workbooks();
                   xlsWorkBook              = xlsWorkBookCollection.add();
                   xlsWorkSheetCollection   = xlsWorkBook.worksheets();
                   xlsWorkSheet             = xlsWorkSheetCollection.itemFromNum(1);

                   xlsWorkSheet.cells().item(row,1).value(_itemid);
                   xlsWorkSheet.cells().item(row,2).value(_price);
                   xlsApplication.visible(true);

          }
        }

        type = cells.item(row+1, 1).value().variantType();
        }while (type != COMVariantType::VT_EMPTY);
        application.quit();

If i do like this, I’m getting to excel files if my items is not in item master…

How should I make all the error items in one excel file?

as per above code Every time you enter into else condition Your making Excel as visible through that will create multiple Excel(as per my analysis). Make Excel as visible outside the Else condition and save the file there, not inside the else.

Yes, its creating excel file each time

if i create a method outside to export the data and if i call the method in else condition that to will create excel file each time right?

I created one container and in else i stored my itemid and price like this:

 excelexport=conIns(excelexport,1,_itemid);
                    excelexport=conIns(excelexport,2,_price);

and created one method to export into excel like this

public void excel_export(container excelexport)
{
   SysExcelApplication  xlsApplication;
   SysExcelWorkBooks    xlsWorkBookCollection;
   SysExcelWorkBook     xlsWorkBook;
   SysExcelWorkSheets   xlsWorkSheetCollection;
   SysExcelWorkSheet    xlsWorkSheet;
   //SysExcelRange        xlsRange;
   int                  row = 1;
   int conLength, cnt;
   str             charHolder;
   ;
   xlsApplication           = SysExcelApplication::construct();
   xlsWorkBookCollection    = xlsApplication.workbooks();
   xlsWorkBook              = xlsWorkBookCollection.add();
   xlsWorkSheetCollection   = xlsWorkBook.worksheets();
   xlsWorkSheet             = xlsWorkSheetCollection.itemFromNum(1);
   xlsWorkSheet.cells().item(row,1).value("Item id");
   xlsWorkSheet.cells().item(row,2).value("Price");
    row++;
        xlsWorkSheet.cells().item(row,1).value(conPeek(excelexport,1));
        xlsWorkSheet.cells().item(row,2).value(conPeek(excelexport,2));

   xlsApplication.visible(true);

}

but excel is creating with last value

ex: if my item id and price is 1 20, 2 25

excel is getting generated with 2 25

may i know what should i do to generate the excel with all the values?

pastedimage1525688136315v1.png

Showing error when i run this export code:

public void excel_export(container excelexport,container excelexport1)
{
   SysExcelApplication  xlsApplication;
   SysExcelWorkBooks    xlsWorkBookCollection;
   SysExcelWorkBook     xlsWorkBook;
   SysExcelWorkSheets   xlsWorkSheetCollection;
   SysExcelWorkSheet    xlsWorkSheet;
   //SysExcelRange        xlsRange;
  // SysExcelCells       cells;
  //  SysExcelCell        cell;
   int                  row=1;
   int                  i,j;
   str                  charHolder;
   ;
   xlsApplication           = SysExcelApplication::construct();
   xlsWorkBookCollection    = xlsApplication.workbooks();
   xlsWorkBook              = xlsWorkBookCollection.add();
   xlsWorkSheetCollection   = xlsWorkBook.worksheets();
   xlsWorkSheet             = xlsWorkSheetCollection.itemFromNum(1);
   xlsWorkSheet.cells().item(row,1).value("Item id");
    //xlsRange.numberFormat("Text");
   xlsWorkSheet.cells().item(row,2).value("Price");
  //xlsRange.numberFormat("Number");
   breakpoint;
   row++;

      while(i<=conlen(excelexport))
       {
            xlsWorkSheet.cells().item(row,1).value(conPeek(excelexport,i));
            //xlsWorkSheet.cells().range("A:A").numberFormat("Text");
            while(j<=conlen(excelexport1))
            {
              xlsWorkSheet.cells().item(row,2).value(conPeek(excelexport1,j));
              //xlsWorkSheet.cells().range("B:B").numberFormat("Number");
               j++;

            }
            i++;

      }

     xlsApplication.visible(true);


}

Try to create the Excel outside the while loop. It might solve your issue.

void clicked()
{
    SysExcelApplication             application,app1;
    SysExcelWorkbooks               workbooks,wbooks;
    SysExcelWorkbook                workbook,wbook;
    SysExcelWorksheets              worksheets,wsheets;
    SysExcelWorksheet               worksheet,wsheet;
    SysExcelCells                   cells,cells1;
    SysExcelCell                    cell;
    COMVariantType                  type;
    System.DateTime                 ShlefDate;
    FilenameOpen                    filename;
    dialogField                     dialogFilename;
    Dialog                          dialog;

   SysExcelApplication  xlsApplication;
   SysExcelWorkBooks    xlsWorkBookCollection;
   SysExcelWorkBook     xlsWorkBook;
   SysExcelWorkSheets   xlsWorkSheetCollection;
   SysExcelWorkSheet    xlsWorkSheet;
   int                  row1;
   int                             row;
    //Table Declarations Starts
    InventItemPrice                 inventprice;
    InventDim                       _inventdim;
    InventParameters                inp;
    InventItemPriceSim              iips,inventItemPriceSimulated;
    //Table Declartions Ends

    //field declaration
    ItemId                          _itemid;
    CostingVersionId                _versionid;
    CostingVersionPriceType         _type;
    Price                           _price;
    PriceUnit                       _unit;
    CostingVersionId                _version;
    InventDimId                     _invent;
    InventSiteId                    _site;
    TransDate                       _fromdate;
    InventItemCostingType           _costingType;


    #OCCRetryCount
    #Excel

    // convert into str from excel cell value

    str COMVariant2Str(COMVariant _cv, int _decimals = 0, int _characters = 0, int _separator1 = 0, int _separator2 = 0)
    {
    switch (_cv.variantType())
    {
    case (COMVariantType::VT_BSTR):
    return _cv.bStr();

    case (COMVariantType::VT_R4):
    return num2str(_cv.float(),_characters,_decimals,_separator1,_separator2);

    case (COMVariantType::VT_R8):
    return num2str(_cv.double(),_characters,_decimals,_separator1,_separator2);

    case (COMVariantType::VT_DECIMAL):
    return num2str(_cv.decimal(),_characters,_decimals,_separator1,_separator2);

    case (COMVariantType::VT_DATE):
    return date2str(_cv.date(),123,2,1,2,1,4);

    case (COMVariantType::VT_EMPTY):
    return "";

    default:
    throw error(strfmt("@SYS26908", _cv.variantType()));
    }
    return "";
    }
    ;

    dialog              =   new Dialog("Excel Upoad");
    dialogFilename      =   dialog.addField(typeId(FilenameOpen));
    dialog.filenameLookupTitle("Upload from Excel");
    dialog.caption("Sales Price Excel Upload");
    dialogFilename.value(filename);
    if(!dialog.run())
    return;
    filename            =   dialogFilename.value();
    application         =   SysExcelApplication::construct();
    workbooks           =   application.workbooks();
    try
    {
        workbooks.open(filename);
    }
    catch (Exception::Error)
    {
        throw error("File cannot be opened.");
    }

    workbook            =   workbooks.item(1);
    worksheets          =   workbook.worksheets();
    worksheet           =   worksheets.itemFromNum(1);
    cells               =   worksheet.cells();


    try
    {
        ttsbegin;
    do
    {

        row++;
        _itemid           =   COMVariant2Str(cells.item(row, 1).value());
        _price            =   cells.item(row, 2).value().double();
        _site             =   COMVariant2Str(cells.item(row, 3).value());

        select Costingversionid from inp;
        _versionid=inp.Costingversionid;
       // breakpoint;
             if(row > 1)
                 {
                    select iips where iips.ItemId==_itemid;
                    if(iips)
                    {
                    iips.ItemId=_itemid;
                    iips.VersionId=_versionid;
                    iips.PriceType=CostingVersionPriceType::Sales;
                    _inventdim.InventSiteId=_site;
                    iips.InventDimId=InventDim::findOrCreate(_inventdim).inventDimId;
                    if(_price>0)
                    {
                        iips.Price=_price;
                    }
                    iips.PriceUnit=1;
                    iips.FromDate=systemdateget();
                    iips.insert();
                    InventItemPriceActivationJob::activateInventItemPriceSimExt(iips);
                    info(strfmt("Items inserted successfully for %1",iips.ItemId));
                    }

                else
                {
                       xlsApplication           = SysExcelApplication::construct();
                       xlsWorkBookCollection    = xlsApplication.workbooks();
                       xlsWorkBook              = xlsWorkBookCollection.add();
                       xlsWorkSheetCollection   = xlsWorkBook.worksheets();
                       xlsWorkSheet             = xlsWorkSheetCollection.itemFromNum(1);
                        xlsWorkSheet.cells().item(row,1).value(_itemid);
                        xlsWorkSheet.cells().item(row,2).value(_price);

                }


        }


        type = cells.item(row+1, 1).value().variantType();
        }while (type != COMVariantType::VT_EMPTY);
        application.quit();
        ttscommit;
        }
        catch
        {
            Error("Upload Failed");
        }
         xlsApplication.visible(true);
}

It is showing only last itemid and price in excel

Check the row value of the cell. there no increment for the row.

else
{
xlsApplication = SysExcelApplication::construct();
xlsWorkBookCollection = xlsApplication.workbooks();
xlsWorkBook = xlsWorkBookCollection.add();
xlsWorkSheetCollection = xlsWorkBook.worksheets();
xlsWorkSheet = xlsWorkSheetCollection.itemFromNum(1);
xlsWorkSheet.cells().item(row1,1).value(“Item”);
xlsWorkSheet.cells().item(row1,2).value(“Price”);
row1++;
xlsWorkSheet.cells().item(row1,1).value(_itemid);
xlsWorkSheet.cells().item(row1,2).value(_price);

}

Is it right?

void clicked()
{
SysExcelApplication application,app1;
SysExcelWorkbooks workbooks,wbooks;
SysExcelWorkbook workbook,wbook;
SysExcelWorksheets worksheets,wsheets;
SysExcelWorksheet worksheet,wsheet;
SysExcelCells cells,cells1;
SysExcelCell cell;
COMVariantType type;
System.DateTime ShlefDate;
FilenameOpen filename;
dialogField dialogFilename;
Dialog dialog;

SysExcelApplication xlsApplication;
SysExcelWorkBooks xlsWorkBookCollection;
SysExcelWorkBook xlsWorkBook;
SysExcelWorkSheets xlsWorkSheetCollection;
SysExcelWorkSheet xlsWorkSheet;
int row1;
int row,LoadRow;
//Table Declarations Starts
InventItemPrice inventprice;
InventDim _inventdim;
InventParameters inp;
InventItemPriceSim iips,inventItemPriceSimulated;
//Table Declartions Ends

//field declaration
ItemId _itemid;
CostingVersionId _versionid;
CostingVersionPriceType _type;
Price _price;
PriceUnit _unit;
CostingVersionId _version;
InventDimId _invent;
InventSiteId _site;
TransDate _fromdate;
InventItemCostingType _costingType;

#OCCRetryCount
#Excel

// convert into str from excel cell value

str COMVariant2Str(COMVariant _cv, int _decimals = 0, int _characters = 0, int _separator1 = 0, int _separator2 = 0)
{
switch (_cv.variantType())
{
case (COMVariantType::VT_BSTR):
return _cv.bStr();

case (COMVariantType::VT_R4):
return num2str(_cv.float(),_characters,_decimals,_separator1,_separator2);

case (COMVariantType::VT_R8):
return num2str(_cv.double(),_characters,_decimals,_separator1,_separator2);

case (COMVariantType::VT_DECIMAL):
return num2str(_cv.decimal(),_characters,_decimals,_separator1,_separator2);

case (COMVariantType::VT_DATE):
return date2str(_cv.date(),123,2,1,2,1,4);

case (COMVariantType::VT_EMPTY):
return “”;

default:
throw error(strfmt("@SYS26908", _cv.variantType()));
}
return “”;
}
;

dialog = new Dialog(“Excel Upoad”);
dialogFilename = dialog.addField(typeId(FilenameOpen));
dialog.filenameLookupTitle(“Upload from Excel”);
dialog.caption(“Sales Price Excel Upload”);
dialogFilename.value(filename);
if(!dialog.run())
return;
filename = dialogFilename.value();
application = SysExcelApplication::construct();
workbooks = application.workbooks();
try
{
workbooks.open(filename);
}
catch (Exception::Error)
{
throw error(“File cannot be opened.”);
}

workbook = workbooks.item(1);
worksheets = workbook.worksheets();
worksheet = worksheets.itemFromNum(1);
cells = worksheet.cells();

xlsApplication = SysExcelApplication::construct();
xlsWorkBookCollection = xlsApplication.workbooks();
xlsWorkBook = xlsWorkBookCollection.add();
xlsWorkSheetCollection = xlsWorkBook.worksheets();
xlsWorkSheet = xlsWorkSheetCollection.itemFromNum(1);
try
{
ttsbegin;
do
{

row++;
_itemid = COMVariant2Str(cells.item(row, 1).value());
_price = cells.item(row, 2).value().double();
_site = COMVariant2Str(cells.item(row, 3).value());

select Costingversionid from inp;
_versionid=inp.Costingversionid;
// breakpoint;
if(row > 1)
{
select iips where iips.ItemId==_itemid;
if(iips)
{
iips.ItemId=_itemid;
iips.VersionId=_versionid;
iips.PriceType=CostingVersionPriceType::Sales;
_inventdim.InventSiteId=_site;
iips.InventDimId=InventDim::findOrCreate(_inventdim).inventDimId;
if(_price>0)
{
iips.Price=_price;
}
iips.PriceUnit=1;
iips.FromDate=systemdateget();
iips.insert();
InventItemPriceActivationJob::activateInventItemPriceSimExt(iips);
info(strfmt(“Items inserted successfully for %1”,iips.ItemId));
}

else
{

xlsWorkSheet.cells().item(LoadRow,1).value(_itemid);
xlsWorkSheet.cells().item(LoadRow,2).value(_price);
LoadRow++;

}

}

type = cells.item(row+1, 1).value().variantType();
}while (type != COMVariantType::VT_EMPTY);
xlsApplication.visible(true);
application.quit();
ttscommit;
}
catch
{
Error(“Upload Failed”);
}

}

_itemid = COMVariant2Str(cells.item(1, 1).value());
_price = cells.item(row, 2).value().double();
_site = COMVariant2Str(cells.item(1, 3).value());

changed the Row to a number then the code is working. this might help.