如何修改Excel Power Query代码实现从指定单元格动态获取日期?
解决Power Query自动读取单元格日期筛选NSE期权链数据的问题
问题背景
在Excel中使用Power Query从NSE印度网站拉取BANKNIFTY期权链数据,目前需每周手动修改日期筛选条件,希望改为自动读取名为Dump的工作表中C43单元格的日期值,现有代码存在语法错误,无法实现需求。
现有代码问题分析
- 单元格读取逻辑错误:原代码尝试读取名为
BNFDump的工作表第1列第1行数据,与需求的Dump工作表C43单元格不符 - 日期格式未匹配:未将单元格日期转换为与NSE接口返回的
expiryDate一致的格式,导致筛选失效 - 存在重复筛选步骤:连续三次执行相同的行筛选操作,属于冗余代码
修正后的Power Query代码
let // 读取Dump工作表C43单元格的日期(行索引从0开始,C43对应索引42,Column3对应C列) TargetDate = Excel.CurrentWorkbook(){[Name="Dump"]}[Content]{42}[Column3], // 将日期转换为NSE接口返回的"dd-MM-yyyy"格式文本 FormattedTargetDate = Text.From(TargetDate, "dd-MM-yyyy"), // 从NSE拉取BANKNIFTY期权链数据 Source = Json.Document(Web.Contents("https://www.nseindia.com/api/option-chain-indices?symbol=BANKNIFTY", [Headers=[#"Accept-Encoding"="gzip, deflate", #"Accept-Language"="en-US,en", #"User-Agent"="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 OPR/68.0.3618.206"]])), records = Source[records], data = records[data], #"Converted to Table" = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"strikePrice", "expiryDate", "PE", "CE"}, {"strikePrice", "expiryDate", "PE", "CE"}), // 使用格式化后的日期筛选数据 #"Filtered Rows" = Table.SelectRows(#"Expanded Column1", each [expiryDate] = FormattedTargetDate), // 展开CE和PE字段 #"Expanded CE" = Table.ExpandRecordColumn(#"Filtered Rows", "CE", {"openInterest", "changeinOpenInterest", "impliedVolatility", "lastPrice", "change", "underlyingValue"}, {"CE.openInterest", "CE.changeinOpenInterest", "CE.impliedVolatility", "CE.lastPrice", "CE.change", "CE.underlyingValue"}), #"Expanded PE" = Table.ExpandRecordColumn(#"Expanded CE", "PE", {"openInterest", "changeinOpenInterest", "impliedVolatility", "lastPrice", "change", "underlyingValue"}, {"PE.openInterest", "PE.changeinOpenInterest", "PE.impliedVolatility", "PE.lastPrice", "PE.change", "PE.underlyingValue"}) in #"Expanded PE"
关键修改说明
- 单元格读取修正:改用
Excel.CurrentWorkbook(){[Name="Dump"]}[Content]{42}[Column3]定位C43单元格,其中{42}是因为Power Query行索引从0开始(第43行对应索引42),Column3对应工作表的C列 - 日期格式统一:通过
Text.From(TargetDate, "dd-MM-yyyy")将单元格日期转换为NSE接口返回的日期格式(例如25-09-2024),确保筛选匹配 - 冗余代码删除:移除了重复的
#"Filtered Rows1"和#"Filtered Rows2"步骤,仅保留一次有效筛选
内容的提问来源于stack exchange,提问作者Athang Tikekar
相关产品推荐
相关产品推荐

