1

どうすればExcelデータにすばやくアクセスできますか。現在、Excel には 200K を超えるレコードが含まれており、X++ コードから取得すると、すべてのレコードを取得するのに多くの時間がかかります。

以下は、データを取得するために使用しているクラスです。1 - SysExcelApplication、SysExcelWorksheet、および SysExcelCells。

以下のコードを使用してセルを取得しています。

excelApp.workbooks().open(filename);
excelWorksheet  = excelApp.worksheets().itemFromName(itemName);
excelCells      = excelWorkSheet.cells();
///pseudo code
loop
    excelCells.item(rowcounter, column1);
    similar for all columns;
end of loop

ここで特別なプロパティを設定する必要がある場合は、教えてください。

4

3 に答える 3

2

CSV ファイルを使用できれば、全体的なパフォーマンスが大幅に向上します (非常に!) 。やむを得ず Excel ファイルを使用する場合は、この Excel ファイルを簡単に csv ファイルに変換してから、csv ファイルを読み取ることができます。そのように作業できない場合は、Office API よりも優れたパフォーマンスを発揮するODBCを介して (データベースへの接続などのクエリ文字列を使用して) Excel ファイルを読み取ることができます。

于 2013-04-29T17:37:36.860 に答える
0

CSV を使用すると、より高速になります。以下はコード例です。

     /* Excel Import*/
#AviFiles

#define.CurrentVersion(1)
#define.Version1(1)
#localmacro.CurrentList
#endmacro

FilenameOpen    filename;

CommaIo         file;
Container       con;

/* File Open Dialog */
Dialog  dialog;
dialogField dialogFilename;
dialogField dialogSiteID;
dialogField dialogLocationId;
DialogButton dialogButton;
InventSite objInventSite;
InventLocation objInventLocation;
InventSiteID objInventSiteID;
InventLocationId objInventLocationID;
int row;
str sSite;
NoYes IsCountingFound;
int iQty;
Counter insertCounter;
Price itemPrice;
ItemId _itemid;
EcoResItemColorName _inventColorID;
EcoResItemSizeName _inventSizeID;


dialog              =   new Dialog("Please select file");
dialogSiteID        =   dialog.addField(extendedTypeStr(InventSiteId), objInventSiteId);
dialogLocationId    =   dialog.addField(extendedTypeStr(InventLocationId), objInventLocationId);
dialogFilename      =   dialog.addField(extendedTypeStr(FilenameOpen));

dialog.filenameLookupFilter(["@SYS100852","*.csv"]);
dialog.filenameLookupTitle("Please select file");
dialog.caption("Please select file");
dialogFilename.value(filename);

if(!dialog.run())
return;

objInventSiteID = dialogSiteID.value();
objInventLocationID = dialogLocationId.value();

/*----- validating warehouse*/
while
select maxof(InventSiteId) from objInventLocation where objInventLocation.InventLocationId == objInventLocationId
{
    If(objInventLocation.InventSiteID != objInventSiteID)
    {
        warning("Warehouse not belongs to site. Please select valid warehouse." ,"Counting lines import utility");
        return;
    }
}

filename  =   dialogFilename.value();
file = new commaIo(filename,'r');
file.inFieldDelimiter(',');

try
{

    if (file)
    {
        ttsbegin;
        while(file.status() == IO_Status::OK)
        {

           con = file.read();

            if (con)
            {
                row ++;

                if(row == 1)
                {
                    if(
                       strUpr(strLtrim(strRtrim( conpeek(con,1) ))) != "ITEM"
                    || strUpr(strLtrim(strRtrim( conpeek(con,2) ))) != "COLOR"
                    || strUpr(strLtrim(strRtrim( conpeek(con,3) ))) != "SIZE"
                    || strUpr(strLtrim(strRtrim( conpeek(con,4) ))) != "PRICE"
                    )
                    {
                        error("Imported file is not according to given format.");
                        ttsabort;
                        return;
                    }
                }
                else
                {


                    IsCountingFound = NoYes::No;
                    _itemid = "";
                    _inventColorID = "";
                    _inventSizeID = "";


                    _itemid = strLtrim(strRtrim(conpeek(con,1) ));
                    _inventColorID = strLtrim(strRtrim(conpeek(con,2) ));
                    _inventSizeID = strLtrim(strRtrim(conpeek(con,3) ));
                    itemPrice = any2real(strLtrim(strRtrim(conpeek(con,4) )));

                }
           }
         }

         if(row <= 1)
         {
            ttsabort;
            warning("No data found in excel file");
         }
         else
         {
            ttscommit;

         }
    }
 }
catch
{
    ttsabort;
    Error('Upload Failed');
}
于 2013-04-23T04:35:45.437 に答える