Excel под XP и ArcView

0 голосов
спросил 14 Дек, 04 от Vasiliy2 (8,240 баллов) в категории Программные продукты Esri
Доброго всем времени суток.
Такая проблема. Под win2000 из ArcView в Excel с помощью скрипта можно выкинуть любую информацию из таблицы а вот под XP это не катит. Кто сталкивался? Помогите. Вот скрипт
 
systemClient = DDEClient.Make( "Excel", "System")
if (systemClient.HasError) then
  MsgBox.error( systemClient.GetErrorMsg, "")
  return nil
end
 
' Create the new Excel worksheet
'systemClient.Execute( "[NEW(1,0,FALSE)]")
 

' Get the name of the new worksheet.  Selection is an Excel item supported for the System topic.
selection = systemClient.Request( "Selection" )
spreadsheet = selection.Left( selection.IndexOf("!"))
 
systemClient.Close
 

ssClient = ddeClient.Make( "Excel", spreadsheet )
 

' Write the table name to the spreadsheet
row    = 1
column = 5
ssClient.Poke( "R"+row.AsString+"C"+column.AsString, "1" )
ssClient.Close

6 Ответы

0 голосов
ответил 14 Дек, 04 от S.E. (12,840 баллов)

Не уверен, но может быть путь не может найти к Excel. Попробуй начать так: (в диалоге можно исправить путь)

systemClient = DDEClient.Make( "Excel", "System")
if (systemClient.HasError) then
  theExcelFile = MsgBox.Input("Укажите путь к файлу Excel.exe?", "Question",
    "c:\program files\microsoft office\office\excel.exe")
       if (theExcelFile = nil) then
         exit
       end

0 голосов
ответил 14 Дек, 04 от Vasiliy2 (8,240 баллов)
Увы путь находит забрать оттуда могу а вот туда на команде
ssClient.Poke( "R"+row.AsString+"C"+column.AsString, "1" )
идет сбой- сегментейшен ... но не виснет а так как будто ничего и не просил
0 голосов
ответил 14 Дек, 04 от S.E. (12,840 баллов)

Если надо атрибутивку выкинуть в EXCEL , то есть такой код:

' Name:  themes2excel.ave
'
' Description: See the "Shift click" instructions below for a script description.
'
' Requires:  Microsoft Excel installed or accessible.  The active document must be a view
' with active Themes.
'
'
' Date: 12-18-00
'***********************************************************************************************
'  Get the active themes, exit it no themes
'***********************************************************************************************

theView = av.GetActiveDoc
theThemes = theView.GetActiveThemes
theThemeNumber = theThemes.count

if (theThemeNumber = 0) then
  MsgBox.Error("Должна быть активная Тема!","Error")
  return nil
end

tn = 0
  
for each i in theThemes
  theFTab = i.GetFTab
 
  '***counting themes***
  tn = tn + 1 
  
'**************************************************************************
'  Check to see if Excel is running, if not start it up
'**************************************************************************
systemClient = DDEClient.Make( "Excel", "System")
if (systemClient.HasError) then
  theExcelFile = MsgBox.Input("Is this the correct path to Excel.exe?", "Question",
    "c:\program files\microsoft office\office\excel.exe")
       if (theExcelFile = nil) then
         exit
       end
    theExcelFileExists = true
    ExcelRunning = False
    systemClient.Close
   
    if (theExcelFileExists = true) then
      system.Execute(theExcelFile.AsString)
    else
      exit
    end
else
  systemClient.Close
  ExcelRunning = True

end

systemClient = DDEClient.Make( "Excel", "System")
if (systemClient.HasError) then
  MsgBox.error( systemClient.GetErrorMsg, "  ")
  return nil
end

'***********************************************************************************************
' Get the name of the new worksheet.  Selection is an Excel item supported for the System topic.
'***********************************************************************************************

  selection = systemClient.Request( "Selection" )
  spreadsheet = selection.Left( selection.IndexOf("!"))

'*******************
' Ensure R1C1 format
'*******************

  systemClient.Execute( "[Workspace(,,TRUE)]" )
  systemClient.Close

'****************************************************************
' Open a new conversation with the Excel spreadsheet as the topic
'****************************************************************

  ssClient = ddeClient.Make( "Excel", spreadsheet )
 
'************************************
' Get table information for later use
'************************************ 
 
  themeName = theFTab.GetName
  theFields = theFTab.GetFields
  theSelection = theFTab.GetSelection
  theSelection.SetAll
 
  SelRecNum = theSelection.Count

'****************************************
' Write the table name to the spreadsheet
'****************************************
if (tn = 1) Then 
  row    = 1
  column = 1
     else
       '*************************************************
       ' Collects Record Number information
       '*************************************************
       theList = List.Make
       aa = theThemeNumber - 1
                 
       for each x in 0..aa
         theThemeNum = x
           a = theThemes.Get(x)
           b = a.GetFTab
           c = b.GetSelection
           c.SetAll
           rc = c.Count
             
           theList.Add(rc)
        end  
       
        '********************************************************
        ' Extracts the Record Selection so it can append in Excel
        '********************************************************

        ln = tn - 2
                   
        if (tn > 1) then
       
          SelRecNum = 0
          for each x in 0..ln                         
             theNum = theList.Get(x)
             SelRecNum = SelRecNum + theNum + 3
          end
         
          row = SelRecNum + 1
          Column = 1           
         
        end
end      
        
ssClient.Poke( "R"+row.AsString+"C"+column.AsString, themeName )


'*********************
'  Get input:
'*********************

oldSelRecs = theFtab.GetSelection.Clone

if (theFtab.GetSelection.Count > 0) then
  SelRecs = theFtab.GetSelection
else
  SelRecs = theFtab.GetSelection
  SelRecs.SetAll
end
SelRecNum = SelRecs.Count

'***********************************************************************************************
'  Ask the user which fields to include:
'***********************************************************************************************

fieldlist = Msgbox.MultiList(theFields,"Select Fields To Export"+nl+"(single click to toggle selection,"+nl+
" click and drag for multiple selection)","EXPORT "+themeName.AsString+" RECORDS TO EXCEL")
if (fieldlist= nil) then exit end


'*****************************
'  Begin the export process
'*****************************

av.ShowMsg("Exporting  to  Excel  ...")

if (tn = 1) Then 
  row    = 2
  column = 1
    else       &

0 голосов
ответил 14 Дек, 04 от Vasiliy2 (8,240 баллов)
да так и делалось но под XP
команда
ssClient.Poke( "R"+row.AsString+"C"+column.AsString, dataString )
не отрабатывается. Вот в чем вопрос
0 голосов
ответил 15 Дек, 04 от Ilya (10,800 баллов)

Под ХР скрипт Евгения работает обсолютно корректно :(

Проверь настройку ODBC

0 голосов
ответил 11 Янв, 05 от Albert1 (10,780 баллов)

Абсолютно точно, писал приложения, данные как берутся из эксела, так и обратно записываются. Так что XP ни при чем. Думаю, ODBC тоже не при чем. DDE, оно и в Африке DDE. Система не надежная, но работает.

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...