VBA调用网页而无需打开浏览器或返回数据

时间:2017-12-04 07:42:54

标签: excel-vba http excel-udf vba excel

我正在尝试创建一个excel UDF,它调用一个运行脚本的网页,该脚本从URL中的参数获取值。 EG:" http://example.com.com/script.php?variable1=123&variable2=456&etc=etc"

我在google搜索后使用了这个,并尝试了其他stackoverflow的答案。是的,它创建了一个udf,是的,你可以在udf中输入一个单元格值,但不能不调用URL(URL上的访问跟踪表示它尚未被调用)。

Function callurl(urltocall As String) As String
Dim urlText As String
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", urltocall, False
.send
urlText = .responseText
End With
End Function

我不需要它来返回任何数据,只是为了调用URL来运行脚本。这样做的目的是从excel中获取变量并将它们用作URL中的参数,该URL将运行脚本并更新Web SQL数据库。

实际结果是什么(excel中的空白单元格,没有访问网页)。

enter image description here

2 个答案:

答案 0 :(得分:1)

该函数不返回任何结果。这是正确的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void removeFileExtension(char *haystack);
int strComparison(char *one, char *two);

int main(int argc, char const *argv[])
{
  //----------------------------------------------------------------------------
  // CHECK INPUT VALIDITY
  //
  if (argc != 2)
  {
    printf("Usage: ./ass2 [file-name]\n");
    return 1;
  }


  //----------------------------------------------------------------------------
  // OPEN FILE (INITIAL)
  //
  char filename[32];
  strcpy(filename, argv[1]);
  FILE *fp = fopen(filename, "r");                                       //FOPEN
  //FILE *fp = fopen("start_of_story\0txt", "r");   // this way does work
  if (fp == NULL)
  {
    // IF NOT FOUND: REMOVE EXTENSION
    removeFileExtension(filename);
    char text[] = "myFile\0";
    int ret_val = -1;
    ret_val = strComparison(filename, text);
    if (ret_val == 0)
      printf("[DEBUG] equal\n");
    else
      printf("[DEBUG] unequal\n");

    printf("[DEBUG] ret_val: %d\n", ret_val);
    printf("[DEBUG] '%s'\n", filename);
    FILE *fp = fopen(filename, "r");                                     //FOPEN

    // IF STILL DOESN'T WORK: ERROR
    if (fp == NULL)
    {
      printf("[ERR] Could not read file %s.\n", filename);
      return 3;
    }
  }


  //--------------------------------------------------------------------------
  // READ DATA (INITIAL)
  //
  int bufsize = 1024;
  char *buffer = malloc(bufsize * sizeof(char));                      //MALLOC
  if (!buffer)
  {
    printf("[ERR] Out of memory.\n");
    return 2;
  }
  fseek(fp, 0, SEEK_SET);
  fread(buffer, bufsize, 1, fp);

  printf("[DEBUG] %s\n", buffer);
  fclose(fp);                                                           //FCLOSE

  free(buffer);
  buffer = NULL;
  return 0;
}

void removeFileExtension(char *haystack)
{
  char needle[1] = ".";
  char *retp;   // return pointer
  retp = strstr(haystack,needle);
  if (*retp == '.')
  {
    while (*retp != '\0')
    {
      *retp++ = '\0';
    }
    printf("[DEBUG] %s\n", haystack);
  }
}

int strComparison(char *one, char *two)
{
  do
  {
    printf("[DEBUG] '%c' == '%c'\n", *one, *two);
    if (*one++ != *two++)
    {
      return 1; // return 1 if unqual
    }
  }
  while ( (*one != '\0') || (*two != '\0') );
  return 0; // return 0 if qual
}

答案 1 :(得分:-1)

更高版本的Excel有一个公式,可以在不需要UDF的情况下执行此操作。

公式为:=WEBSERVICE("yoururlhere.com")

有关其他信息,请参阅this article on office.com