Php Google表格API v4不适用于包含单引号的工作表名称

时间:2017-05-11 13:05:22

标签: php google-api google-api-php-client google-sheets-api

我使用Googles Sheet API for php从工作表中检索值。我的代码似乎适用于所有工作表名称,除了那些包含单引号的工作表名称。我尝试使用\'来逃避单引号但它似乎无法按预期从工作表中提取数据。

我的代码如下所示。

$sheetId = "1Oz0c3OZN9parxwXU3l9pwWC1wwvmODHQiUz9is50Dy0";
$sheetName = "knijbnjk''''''''''jguvhygvhy";

$escapedSheetName = str_replace("'", "\'", $sheetName);
$range = "'{$escapedSheetName}'!A1:B4";

// returns instance of Google_Service_Sheets with client setup
$service = $this->getSheetService();

$result = $service->spreadsheets_values->get($sheetId, $range);
var_dump($result);

我尝试过使用其他一些变体,例如/'并取代'与&引用;我尝试将单引号转换为双引号但到目前为止似乎没有任何效果。似乎无法找到解决这个问题的方法。

2 个答案:

答案 0 :(得分:0)

尝试执行SpreadSheets.get这应该返回Spreadsheet resource

"sheets": [
{
  object(Sheet)
}

这应返回电子表格中所有Sheet的列表。

"properties": {
    object(SheetProperties)
 },

每张表格中的属性应包含有关该表格的信息。

{
  "sheetId": number,
  "title": string,
  "index": number,
  "sheetType": enum(SheetType),
  "gridProperties": {
    object(GridProperties)
  },
  "hidden": boolean,
  "tabColor": {
    object(Color)
  },
  "rightToLeft": boolean,
}

我的赌注是它的html编码' - > %27

答案 1 :(得分:0)

所以事实证明你必须用另一个单引号来逃避单一引用。

所以解决方案是

class RouterStub {
  navigateByUrl(url: String) { return url; }
}

class GlobalDataServiceStub {
  shareObj: any = {};
}

describe('LoginComponent', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [LoginComponent],
       providers: [
         { provide: GlobalDataService, useClass: GlobalDataServiceStub },
         { provide: Router, useClass: RouterStub }
       ]
    });

    fixture = TestBed.createComponent(LoginComponent);
    comp = fixture.componentInstance;
  });

  it('should set role to admin',
    inject([GlobalDataService], (gd: GlobalDataService) => {
        comp.login();
        expect(gd.shareObj['role']).toBe('admin');
    })
  );

});

太奇怪了。