请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

142

主题

7232

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
11988

SpreadJS 认证SpreadJS 高级认证讲师达人悬赏达人

Richard.Ma 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-10-21 18:00  /   查看:88  /  回复:0
本帖最后由 Richard.Ma 于 2021-10-21 18:04 编辑

        Excel 2013 中引入的 WEBSERVICE 公式可以直接从 Internet 上的 Web 服务中以 XML 格式获取数据。使用 FILTERXML 公式可以解析返回的 XML 字符串。它使用 XPath 表达式从 XML 字符串解析到特定数据信息。

        GrapeCity Documents for Excel 库(称为 GcExcel)支持 WEBSERVICE 和 FILTERXML 函数。
        在本文中,我们将展示如何在 GcExcel 中使用这些公式来检索天气数据信息并使用 C# 将其保存到 Excel。

步骤 1:设置 C# 项目
我们将按照以下步骤创建一个基本的 GcExcel 项目:

  • 在 VS 中,创建一个新的 .NET Core 控制台应用程序
  • 从 NuGet 包管理器安装“GrapeCity.Documents.Excel”包(版本 4.2.0)
  • 使用以下代码创建一个新工作簿并获取工作表:
  1. //Create a new workbook
  2. var workbook = new GrapeCity.Documents.Excel.Workbook();
  3. //Fetch worksheet
  4. IWorksheet ws = workbook.Worksheets[0];
复制代码



步骤 2:以 XML 格式获取天气数据
可以通过将 URL 传递给 WEBSERVICE 函数以 XML 格式获取来自气象局的天气数据,如下所述:
WEBSERVICE:从 Internet 或 Intranet 上的 Web 服务返回数据。
以下代码设置了用于获取天气数据的webservice公式单元格
  1. ws.Range["H1"].Value = "URL";
  2.                         ws.Range["I1"].Value = "https://flash.weather.com.cn/wmaps/xml/china.xml";

  3.                         ws.Range["H2"].Value = "获取的数据 (WEBSERVICE Function)";
  4.                         ws.Range["I2"].Formula = "WEBSERVICE(I1)";
复制代码

此公式获取的天气数据xml截图如下
image.png732136840.png




步骤 3:解析天气数据
使用 FILTERXML 函数从中提取所需的信息,如下所述:
FILTERXML:使用指定的 XPath 从 XML 内容返回特定数据。
语法:FILTERXML(xml, xpath)
参考下面的代码
  1.                         ws.Range["B1"].Value = "省份";
  2.                         ws.Range["C1"].Value = "城市";
  3.                         ws.Range["D1"].Value = "天气";
  4.                         ws.Range["E1"].Value = "最高温度";
  5.                         ws.Range["F1"].Value = "最低温度";
  6.                         ws.Range["G1"].Value = "风向风速";

  7.                         ws.Range["A2:A38"].Formula = "ROW(A1)";
  8.                         ws.Range["B2:B38"].Formula = "FILTERXML($I$2,"//china/city["&$A2&"]/@quName")";
  9.                         ws.Range["C2:C38"].Formula = "FILTERXML($I$2,"//china/city["&$A2&"]/@cityname")";
  10.                         ws.Range["D2:D38"].Formula = "FILTERXML($I$2,"//china/city["&$A2&"]/@stateDetailed")";
  11.                         ws.Range["E2:E38"].Formula = "FILTERXML($I$2,"//china/city["&$A2&"]/@tem1")";
  12.                         ws.Range["F2:F38"].Formula = "FILTERXML($I$2,"//china/city["&$A2&"]/@tem2")";
  13.                         ws.Range["G2:G38"].Formula = "FILTERXML($I$2,"//china/city["&$A2&"]/@windState")";
复制代码


步骤4:优化excel显示的样式,保存excel文件
  1.                         ws.Range["A:F"].ColumnWidth=10;
  2.                         ws.Range["G:G"].ColumnWidth = 30;
  3.                         ws.Range["A1:G38"].Borders.LineStyle = BorderLineStyle.Medium;
  4.                         ws.Range["A1:G1"].Interior.Color = Color.FromArgb(189, 215, 138);
  5.                         ws.Range["A1:G1"].Font.Size = 14;

  6.                         //Save to an Excel file
  7.                         workbook.Save("webserviceandfilterxml.xlsx");
复制代码


excel文件最终显示效果,可以完整的显示当天各个城市的各项天气信息,在此基础上也可以做后续操作生成图表
image.png442641600.png


.NET Core项目代码见附件
WebserviceFunction.zip (10.96 MB, 下载次数: 14)

0 个回复

您需要登录后才可以回帖 登录 | 立即注册