【お知らせ】この部分は英語原文のみでの提供となります。何卒ご了承ください。
3.6.4 Re-Import
Version Info
Minimum Origin Version Required: Origin 8.5.1
Description
Origin improve Re-Importing for the data format type in File: Import submenu. From 8.5.1, Re-Import supports the user define data format file. The following is an example on how to create an X-Function to import a binary file to Worksheet with the re-import options.
Steps
-
New an X-Function named impuser like the following picture.
reimp variable for internal used to specify this X-Function be called from the 1st importing or re-importing.
reimportable also for internal used to specify this X-Function if can do reimport. So the value in Data column should be 1.
The two variables both are hidden on dailog. See "V:0" in Option String column. This option used to set control as hidden. -
Open this X-Function in Origin Code Builder. Add the following codes to impuser function:
Worksheet wks; okxf_resolve_string_get_origin_object(orng.GetDescription(), &wks); //Fill target page with numbers _import_to_wks(fname, options, wks); // add import information for reimport add_import_info(wks, fname, options, orng, reimp);
-
Copy the following funtions to the line after //put your own support static functions here.
//put your own support static functions here #include <..\OriginLab\fu_utils.h> static void add_import_info(Worksheet& wks, const string& fname, TreeNode& options, const Range& orng, int reimp) { // save X-Function name into options tree fuSetXFunctionName(options, "impuser"); TreeNode tnUsingFilter; // filter is none double dDefault = 0; if ( fuGetDouble(options, IDE_DISP_IMP_ORIGINVER, dDefault) ) tnUsingFilter = options; Tree trInput; TreeNode trRange = trInput.AddNode("Range"); if (!trRange.SetDataRange(orng)) return; if (!impinfo_AddFile(wks, fname, NULL, ASCIMP_MODE_NEW_SHEETS, FILTER_TYPE_XFUNC, tnUsingFilter, 1, trRange, reimp)) return; } static bool _import_to_wks(const string& fname, TreeNode& options, Worksheet &wks) { if ( !wks.IsValid() ) return false; file fIn; if( fIn.Open(fname, file::modeRead | file::shareDenyWrite) == FALSE ) return false; vector vv(10); fIn.Read(vv, 10 * sizeof(double)); fIn.Close(); if( wks.GetNumCols() == 0 ) wks.SetSize(-1, 1); Column col = wks.Columns(0); vectorbase &vb = col.GetDataObject(); vb = vv; return true; }
-
Put the codes below into impuser_make_tree function to construct options tree. If want to remove options tree to keep X-Function simple, you can add "V:0" for this variable in Option String column in X-Function Builder to hide this control. But cannot remove this variable since re-import need put some useful information into this tree.
if(0 == strcmp(lpcszVarName, "options") ) { // add import mode related treenodes constructOptionsForXF(tr, false, true); }
- Click Compile button on the top of this X-Function.
Import and Re-Import
-
In Origin Code Builder, new a c/cpp file and copy the following codes to it. This function used to write a data array to a *.dat file. This file will be used to do import in the below step. Click Build toobar button to compile and link.
void write_binary_file(double dd) { string fname = GetOriginPath(ORIGIN_PATH_USER) + "TestFile.dat"; file fIn; if( fIn.Open(fname, file::modeWrite | file::modeCreate) == FALSE ) return; vector vData; vData.Data(1,10,1); vData += dd; fIn.Write(vData, sizeof(double)*vData.GetSize()); fIn.Close(); }
- Run "write_binary_file 0" in Command window to create file TestFile.dat under Origin User File Folder and write data 1,2,... 10 to file.
- Run "impuser -d" in Command window and click OK button to import this file.
- Run "write_binary_file 10" in Command window to rewrite data 11,12,...20, into the same data file.
- Choose Origin menu File: Re-Import Directly to do re-import.