none
Import fra Excel til C5

    Spørgsmål

  • Hej,

    Jeg skal importere nogle poster fra et Excel ark, og i stedet for at bede brugeren om at eksportere til komma filer e.lign. så vil jeg gerne importere direkte fra Excel filen.

    Når jeg kører nedenstående script, får jeg '0' ud i min print, hvilket ikke er hvad der står i B2 i mit regneark. Er der en der ved hvor man kan finde dokumentationen på dette (Jeg kan kun finde XAC dokumentationen) eller har et lille eksempel der virker?

    12. marts 2014 07:43

Alle besvarelser

  • De kan bare gemme filen i csv, og så kan du lave en fil i datamanipulation, der importerer direkte til kladden. Det er langt det nemmeste.

    Mvh Maria

    12. marts 2014 10:38
  • Hej Maria,

    jeg vil netop undgå at det skal gemmes i en CSV fil, da det er et regneark med flere ark, som helt sikkert vil give problemer ved udlæsning. 

    12. marts 2014 11:02
  • Prøv at sætte en SET #AppShov ind før print for at se om du har fat i filen.

    Mvh Maria

    12. marts 2014 12:03
  • Hej Sune,

    COMPRINTEXCEL.MAC er skrevet specifikt til ExcelGen.XAL og den tilsvarende udskriftfunktionalitet i C5, og indenfor rammerne af ExcelGen.XAL hænger tingene sammen.

    COMPRINTEXCEL.MAC er ikke tiltænkt anden form for integration, så hvis man vil lave anden integration, må man lave den fra bunden af i COMAPI eller XAC.

    I COMAPI_Reference_Manual_2012.pdf findes eksempler, som man kan bygge videre på.

    Nedenstående kørsel er baseret på COMAPI, og henter 3 værdier ud af felterne B3, B4 og B5 på ”Sheet2” Workshet’et.

    {XAL:Test1}

    #MacroLoad(SYSTEM_INFORMATION)

    STR 12 &HCOM

    STR 80 &HR

    STR 12 &HWORKBOOKS

    STR 12 &HWORKBOOK

    STR 12 &HSHEETS

    STR 12 &HSHEET

    STR 12 &HRANGE

    INT &Counter

    STR 30 &Celle

    STR 254 &FileName = #OsXalpath + 'test.xlsx'

    SET &HCOM = COMCreate(0, 'Excel.Application', '', 0)

    // Get a handle to the workbooks collection

    SET COMPush(&HCOM, &HCOM)

    SET &HR = COMGet(&HCOM, 'Workbooks',0)

    SET COMPushVariant(&HCOM, 'VT_BSTR', 'HWorkbooks')

    SET COMTop(&HCOM, 130)

    //Open file/ Get a named handle to the workbook

    SET COMPush(&HCOM, 'HWorkbooks')

    SET COMPushVariant(&HCOM, 'VT_BSTR', &FileName)

    SET &HR = COMInvoke(&HCOM, 'Open', 1, 1)

    SET COMPushVariant(&HCOM, 'VT_BSTR', 'HWorkbook')

    SET COMTop(&HCOM, 130)

    // Show Excel

    SET COMPush(&HCOM, &HCOM)

    SET COMPushVariant(&HCOM, 'VT_BOOL', 'TRUE' )

    SET &HR = COMPut(&HCOM, 'Visible', 0)

    // Get the sheets collection

    SET COMPush(&HCOM, 'HWorkbook')

    SET &HR = COMGet(&HCOM, 'Sheets',0)

    SET &HSHEETS = COMTop(&HCOM, 2)

    // Get the second sheet in the collection

    SET COMPush(&HCOM, &HSHEETS)

    SET COMPushVariant(&HCOM,'VT_I4', '2')

    SET &HR = COMInvoke(&HCOM, 'Item',1,1)

    SET &HSHEET = COMTop(&HCOM, 2)

    // Get a range

    SET COMPush(&HCOM, &HSHEET)

    SET COMPushVariant(&HCOM,'VT_BSTR', 'B3')

    SET &HR = COMGet(&HCOM, 'Range', 1)

    SET &HRANGE = COMTop(&HCOM, 2)

    // Get a value

    SET COMPush(&HCOM, &HRANGE)

    SET &HR = COMGet(&HCOM, 'Value', 0)

    SET &Celle = COMTopVariant(&HCOM, 2)

    PRINT &Celle

    // Get a range

    SET COMPush(&HCOM, &HSHEET)

    SET COMPushVariant(&HCOM,'VT_BSTR', 'B4')

    SET &HR = COMGet(&HCOM, 'Range', 1)

    SET &HRANGE = COMTop(&HCOM, 2)

    // Get a value

    SET COMPush(&HCOM, &HRANGE)

    SET &HR = COMGet(&HCOM, 'Value', 0)

    SET &Celle = COMTopVariant(&HCOM, 2)

    PRINT &Celle

    // Get a range

    SET COMPush(&HCOM, &HSHEET)

    SET COMPushVariant(&HCOM,'VT_BSTR', 'B5')

    SET &HR = COMGet(&HCOM, 'Range', 1)

    SET &HRANGE = COMTop(&HCOM, 2)

    // Get a value

    SET COMPush(&HCOM, &HRANGE)

    SET &HR = COMGet(&HCOM, 'Value', 0)

    SET &Celle = COMTopVariant(&HCOM, 2)

    PRINT &Celle

    // Quit Excel & Release object

    PRINT 'Hit enter to quit Excel' PAUSE

    SET COMPush(&HCOM, &HCOM)

    SET COMPushVariant(&HCOM, 'VT_BOOL', '0')

    SET &HR = COMPut(&HCOM, 'DisplayAlerts',0)

    SET COMPush(&HCOM, &HCOM)

    SET &HR = COMInvoke(&HCOM, 'Quit',0, 0)

    SET &HR = COMRelease(&HCOM)

    PAUSE

    Resultatet af kørslen ser således ud:

    Men ellers er det med en finger solidt plantet i dokumentationen at denne form for integration skal udvikles:

    Excel 2013 developer reference
    http://msdn.microsoft.com/en-us/library/ee861528(v=office.15).aspx

    og

    Object model
    http://msdn.microsoft.com/en-us/library/ff194068(v=office.15).aspx


    Venlig Hilsen Henrik Hansen Program Manager II Microsoft Dynamics C5


    12. marts 2014 15:21
    Ejer