[{"data":1,"prerenderedAt":4587},["ShallowReactive",2],{"content-/chrome-extension-table-data-copier":3,"all-pages-for-dir":4566,"related-/chrome-extension-table-data-copier":4567,"og-image-/chrome-extension-table-data-copier":4586},{"id":4,"title":5,"body":6,"category":4550,"concepts":4550,"description":4551,"extension":4552,"meta":4553,"navigation":467,"ogImage":4550,"path":4554,"project_name":4550,"published":4555,"publishedAt":4556,"seo":4557,"source":4550,"stem":4558,"tags":4559,"todo":4550,"unpublished":4555,"updatedAt":4556,"__hash__":4565},"pages/2025-12/2025-12-01/chrome-extension-table-data-copier.md","Chrome拡張機能 - テーブルデータコピー機能の実装ドキュメント",{"type":7,"value":8,"toc":4525},"minimark",[9,13,17,36,46,49,52,55,59,64,78,255,259,265,284,287,416,420,426,489,495,542,547,643,647,662,714,724,727,730,738,742,1025,1031,1035,1040,1709,1714,1728,1732,3489,3494,3532,3536,3778,3782,3915,3920,3923,3927,3933,3939,3944,4094,4098,4103,4108,4113,4117,4122,4127,4131,4241,4245,4250,4255,4259,4296,4300,4395,4398,4401,4407,4411,4414,4489,4492,4495,4519,4522],[10,11,5],"h1",{"id":12},"chrome拡張機能-テーブルデータコピー機能の実装ドキュメント",[14,15,16],"h2",{"id":16},"対象ウェブサイト",[18,19,20,24,25,31],"p",{},[21,22,23],"strong",{},"URL",": ",[26,27,28],"a",{"href":28,"rel":29},"https://app.koyfin.com/estimates/eac/",[30],"nofollow",[32,33],"img",{"alt":34,"src":35},"alt text","/2025-12/2025-12-01/image.png",[18,37,38,41,42,45],{},[21,39,40],{},"対象ページ",": アナリストエスティメイツ（Analyst Estimates） > ",[21,43,44],{},"Actual","ページ",[18,47,48],{},"このドキュメントは、上記のKoyfinウェブサイトの財務データテーブルをExcel/Googleスプレッドシートに効率的にコピーするためのChrome拡張機能の実装ガイドです。",[14,50,51],{"id":51},"概要",[18,53,54],{},"仮想スクロール環境下でも、div要素で構成された複雑な財務データテーブルを完全にコピーできるChrome拡張機能。",[14,56,58],{"id":57},"重要な注意点他のai向け","重要な注意点（他のAI向け）",[60,61,63],"h3",{"id":62},"_1-html構造の特徴","1. HTML構造の特徴",[18,65,66,69,70,74,75],{},[21,67,68],{},"最も重要",": このテーブルは",[71,72,73],"code",{},"\u003Ctable>","タグではなく、",[21,76,77],{},"div要素で構成されている",[79,80,85],"pre",{"className":81,"code":82,"language":83,"meta":84,"style":84},"language-html shiki shiki-themes vitesse-light vitesse-light","\u003Cdiv class=\"table-styles__table___fNvz7\">\n  \u003Cdiv class=\"table-styles__table__scrollContainer___WBAWY\">\n    \u003Cdiv class=\"table-styles__table__head___Uu9qm\">\n      \u003Cdiv class=\"table-styles__table__row___K6TSS\">\n        \u003Cdiv class=\"table-styles__table__headerCell___gC361\">...\u003C/div>\n      \u003C/div>\n    \u003C/div>\n  \u003C/div>\n\u003C/div>\n","html","",[71,86,87,120,141,162,183,216,226,236,246],{"__ignoreMap":84},[88,89,92,96,100,104,107,111,115,117],"span",{"class":90,"line":91},"line",1,[88,93,95],{"class":94},"shFtX","\u003C",[88,97,99],{"class":98},"sHkkW","div",[88,101,103],{"class":102},"s4oTP"," class",[88,105,106],{"class":94},"=",[88,108,110],{"class":109},"sMJiu","\"",[88,112,114],{"class":113},"sdGka","table-styles__table___fNvz7",[88,116,110],{"class":109},[88,118,119],{"class":94},">\n",[88,121,123,126,128,130,132,134,137,139],{"class":90,"line":122},2,[88,124,125],{"class":94},"  \u003C",[88,127,99],{"class":98},[88,129,103],{"class":102},[88,131,106],{"class":94},[88,133,110],{"class":109},[88,135,136],{"class":113},"table-styles__table__scrollContainer___WBAWY",[88,138,110],{"class":109},[88,140,119],{"class":94},[88,142,144,147,149,151,153,155,158,160],{"class":90,"line":143},3,[88,145,146],{"class":94},"    \u003C",[88,148,99],{"class":98},[88,150,103],{"class":102},[88,152,106],{"class":94},[88,154,110],{"class":109},[88,156,157],{"class":113},"table-styles__table__head___Uu9qm",[88,159,110],{"class":109},[88,161,119],{"class":94},[88,163,165,168,170,172,174,176,179,181],{"class":90,"line":164},4,[88,166,167],{"class":94},"      \u003C",[88,169,99],{"class":98},[88,171,103],{"class":102},[88,173,106],{"class":94},[88,175,110],{"class":109},[88,177,178],{"class":113},"table-styles__table__row___K6TSS",[88,180,110],{"class":109},[88,182,119],{"class":94},[88,184,186,189,191,193,195,197,200,202,205,209,212,214],{"class":90,"line":185},5,[88,187,188],{"class":94},"        \u003C",[88,190,99],{"class":98},[88,192,103],{"class":102},[88,194,106],{"class":94},[88,196,110],{"class":109},[88,198,199],{"class":113},"table-styles__table__headerCell___gC361",[88,201,110],{"class":109},[88,203,204],{"class":94},">",[88,206,208],{"class":207},"sG7-3","...",[88,210,211],{"class":94},"\u003C/",[88,213,99],{"class":98},[88,215,119],{"class":94},[88,217,219,222,224],{"class":90,"line":218},6,[88,220,221],{"class":94},"      \u003C/",[88,223,99],{"class":98},[88,225,119],{"class":94},[88,227,229,232,234],{"class":90,"line":228},7,[88,230,231],{"class":94},"    \u003C/",[88,233,99],{"class":98},[88,235,119],{"class":94},[88,237,239,242,244],{"class":90,"line":238},8,[88,240,241],{"class":94},"  \u003C/",[88,243,99],{"class":98},[88,245,119],{"class":94},[88,247,249,251,253],{"class":90,"line":248},9,[88,250,211],{"class":94},[88,252,99],{"class":98},[88,254,119],{"class":94},[60,256,258],{"id":257},"_2-仮想スクロールvirtual-scrollingの問題","2. 仮想スクロール（Virtual Scrolling）の問題",[18,260,261,264],{},[21,262,263],{},"重大な注意点",": このテーブルは仮想スクロールを使用しているため、画面に表示されている要素だけがDOMに存在する。",[266,267,268,272,278],"ul",{},[269,270,271],"li",{},"スクロールすると、古い要素がDOMから削除され、新しい要素が追加される",[269,273,274,277],{},[71,275,276],{},"querySelectorAll","で取得できるのは、現在表示されている要素のみ",[269,279,280,281],{},"全データを取得するには、",[21,282,283],{},"自動スクロールで全要素を強制的にロードする必要がある",[18,285,286],{},"仮想スクロールの特徴：",[79,288,290],{"className":81,"code":289,"language":83,"meta":84,"style":84},"\u003C!-- スクロールコンテナ -->\n\u003Cdiv class=\"table-styles__table__scrollContainer___WBAWY\" style=\"height: XXXpx;\">\n  \u003C!-- 仮想的な高さを持つコンテナ -->\n  \u003Cdiv style=\"width: 3080px; height: 4878px; position: relative;\">\n    \u003C!-- 行は position: absolute で配置される -->\n    \u003Cdiv class=\"table-styles__table__row___K6TSS\" style=\"position: absolute; top: 318px;\">\n      ...\n    \u003C/div>\n  \u003C/div>\n\u003C/div>\n",[71,291,292,298,328,333,352,357,386,391,399,407],{"__ignoreMap":84},[88,293,294],{"class":90,"line":91},[88,295,297],{"class":296},"sxvE3","\u003C!-- スクロールコンテナ -->\n",[88,299,300,302,304,306,308,310,312,314,317,319,321,324,326],{"class":90,"line":122},[88,301,95],{"class":94},[88,303,99],{"class":98},[88,305,103],{"class":102},[88,307,106],{"class":94},[88,309,110],{"class":109},[88,311,136],{"class":113},[88,313,110],{"class":109},[88,315,316],{"class":102}," style",[88,318,106],{"class":94},[88,320,110],{"class":109},[88,322,323],{"class":113},"height: XXXpx;",[88,325,110],{"class":109},[88,327,119],{"class":94},[88,329,330],{"class":90,"line":143},[88,331,332],{"class":296},"  \u003C!-- 仮想的な高さを持つコンテナ -->\n",[88,334,335,337,339,341,343,345,348,350],{"class":90,"line":164},[88,336,125],{"class":94},[88,338,99],{"class":98},[88,340,316],{"class":102},[88,342,106],{"class":94},[88,344,110],{"class":109},[88,346,347],{"class":113},"width: 3080px; height: 4878px; position: relative;",[88,349,110],{"class":109},[88,351,119],{"class":94},[88,353,354],{"class":90,"line":185},[88,355,356],{"class":296},"    \u003C!-- 行は position: absolute で配置される -->\n",[88,358,359,361,363,365,367,369,371,373,375,377,379,382,384],{"class":90,"line":218},[88,360,146],{"class":94},[88,362,99],{"class":98},[88,364,103],{"class":102},[88,366,106],{"class":94},[88,368,110],{"class":109},[88,370,178],{"class":113},[88,372,110],{"class":109},[88,374,316],{"class":102},[88,376,106],{"class":94},[88,378,110],{"class":109},[88,380,381],{"class":113},"position: absolute; top: 318px;",[88,383,110],{"class":109},[88,385,119],{"class":94},[88,387,388],{"class":90,"line":228},[88,389,390],{"class":207},"      ...\n",[88,392,393,395,397],{"class":90,"line":238},[88,394,231],{"class":94},[88,396,99],{"class":98},[88,398,119],{"class":94},[88,400,401,403,405],{"class":90,"line":248},[88,402,241],{"class":94},[88,404,99],{"class":98},[88,406,119],{"class":94},[88,408,410,412,414],{"class":90,"line":409},10,[88,411,211],{"class":94},[88,413,99],{"class":98},[88,415,119],{"class":94},[60,417,419],{"id":418},"_3-ヘッダーの複数行構造","3. ヘッダーの複数行構造",[18,421,422,425],{},[21,423,424],{},"重要",": ヘッダーセルには、label要素ではなく、改行で区切られたテキストが直接テキストノードとして含まれている。",[79,427,429],{"className":81,"code":428,"language":83,"meta":84,"style":84},"\u003Cdiv class=\"table-styles__table__headerCell___gC361\" style=\"left: 0px;\">Fiscal Quarters\n\nPeriod Ending\n\nReport Date\u003C/div>\n",[71,430,431,463,469,474,478],{"__ignoreMap":84},[88,432,433,435,437,439,441,443,445,447,449,451,453,456,458,460],{"class":90,"line":91},[88,434,95],{"class":94},[88,436,99],{"class":98},[88,438,103],{"class":102},[88,440,106],{"class":94},[88,442,110],{"class":109},[88,444,199],{"class":113},[88,446,110],{"class":109},[88,448,316],{"class":102},[88,450,106],{"class":94},[88,452,110],{"class":109},[88,454,455],{"class":113},"left: 0px;",[88,457,110],{"class":109},[88,459,204],{"class":94},[88,461,462],{"class":207},"Fiscal Quarters\n",[88,464,465],{"class":90,"line":122},[88,466,468],{"emptyLinePlaceholder":467},true,"\n",[88,470,471],{"class":90,"line":143},[88,472,473],{"class":207},"Period Ending\n",[88,475,476],{"class":90,"line":164},[88,477,468],{"emptyLinePlaceholder":467},[88,479,480,483,485,487],{"class":90,"line":185},[88,481,482],{"class":207},"Report Date",[88,484,211],{"class":94},[88,486,99],{"class":98},[88,488,119],{"class":94},[18,490,491,494],{},[21,492,493],{},"間違った実装例",":",[79,496,500],{"className":497,"code":498,"language":499,"meta":84,"style":84},"language-javascript shiki shiki-themes vitesse-light vitesse-light","// ❌ これは動かない（label要素が存在しないため）\nconst labels = cell.querySelectorAll('label');\n","javascript",[71,501,502,507],{"__ignoreMap":84},[88,503,504],{"class":90,"line":91},[88,505,506],{"class":296},"// ❌ これは動かない（label要素が存在しないため）\n",[88,508,509,513,516,519,522,525,528,531,534,537,539],{"class":90,"line":122},[88,510,512],{"class":511},"stQ0i","const",[88,514,515],{"class":102}," labels",[88,517,518],{"class":94}," =",[88,520,521],{"class":102}," cell",[88,523,524],{"class":94},".",[88,526,276],{"class":527},"senZ8",[88,529,530],{"class":94},"(",[88,532,533],{"class":109},"'",[88,535,536],{"class":113},"label",[88,538,533],{"class":109},[88,540,541],{"class":94},");\n",[18,543,544,494],{},[21,545,546],{},"正しい実装例",[79,548,550],{"className":497,"code":549,"language":499,"meta":84,"style":84},"// ✅ textContentを取得して改行で分割\nconst text = cell.textContent.trim();\nconst lines = text.split('\\n').map(line => line.trim()).filter(line => line);\n",[71,551,552,557,581],{"__ignoreMap":84},[88,553,554],{"class":90,"line":91},[88,555,556],{"class":296},"// ✅ textContentを取得して改行で分割\n",[88,558,559,561,564,566,568,570,573,575,578],{"class":90,"line":122},[88,560,512],{"class":511},[88,562,563],{"class":102}," text",[88,565,518],{"class":94},[88,567,521],{"class":102},[88,569,524],{"class":94},[88,571,572],{"class":102},"textContent",[88,574,524],{"class":94},[88,576,577],{"class":527},"trim",[88,579,580],{"class":94},"();\n",[88,582,583,585,588,590,592,594,597,599,601,605,607,610,613,615,617,620,623,625,627,630,633,635,637,639,641],{"class":90,"line":143},[88,584,512],{"class":511},[88,586,587],{"class":102}," lines",[88,589,518],{"class":94},[88,591,563],{"class":102},[88,593,524],{"class":94},[88,595,596],{"class":527},"split",[88,598,530],{"class":94},[88,600,533],{"class":109},[88,602,604],{"class":603},"snbK4","\\n",[88,606,533],{"class":109},[88,608,609],{"class":94},").",[88,611,612],{"class":527},"map",[88,614,530],{"class":94},[88,616,90],{"class":102},[88,618,619],{"class":94}," =>",[88,621,622],{"class":102}," line",[88,624,524],{"class":94},[88,626,577],{"class":527},[88,628,629],{"class":94},"()).",[88,631,632],{"class":527},"filter",[88,634,530],{"class":94},[88,636,90],{"class":102},[88,638,619],{"class":94},[88,640,622],{"class":102},[88,642,541],{"class":94},[60,644,646],{"id":645},"_4-セルの位置情報","4. セルの位置情報",[18,648,649,650,653,654,657,658,661],{},"各セルは",[71,651,652],{},"position: absolute","で配置されており、",[71,655,656],{},"style.left","と",[71,659,660],{},"style.top","で位置が指定されている。",[79,663,665],{"className":81,"code":664,"language":83,"meta":84,"style":84},"\u003Cdiv class=\"table-styles__table__dataCell___nRZp0\"\n     style=\"position: absolute; left: 280px; top: 318px;\">\n  ...\n\u003C/div>\n",[71,666,667,685,701,706],{"__ignoreMap":84},[88,668,669,671,673,675,677,679,682],{"class":90,"line":91},[88,670,95],{"class":94},[88,672,99],{"class":98},[88,674,103],{"class":102},[88,676,106],{"class":94},[88,678,110],{"class":109},[88,680,681],{"class":113},"table-styles__table__dataCell___nRZp0",[88,683,684],{"class":109},"\"\n",[88,686,687,690,692,694,697,699],{"class":90,"line":122},[88,688,689],{"class":102},"     style",[88,691,106],{"class":94},[88,693,110],{"class":109},[88,695,696],{"class":113},"position: absolute; left: 280px; top: 318px;",[88,698,110],{"class":109},[88,700,119],{"class":94},[88,702,703],{"class":90,"line":143},[88,704,705],{"class":207},"  ...\n",[88,707,708,710,712],{"class":90,"line":164},[88,709,211],{"class":94},[88,711,99],{"class":98},[88,713,119],{"class":94},[18,715,716,718,719,657,721,723],{},[21,717,424],{},": セルを正しい順序で並べるには、",[71,720,656],{},[71,722,660],{},"の値でソートする必要がある。",[14,725,726],{"id":726},"実装の詳細",[60,728,729],{"id":729},"ファイル構成",[79,731,736],{"className":732,"code":734,"language":735},[733],"language-text","chrome-extension-kofyin/\n├── manifest.json          # 拡張機能の設定\n├── content.js             # メインロジック\n├── content.css            # スタイル\n├── popup.html             # ポップアップUI\n└── create-icons.html      # アイコン生成ツール\n","text",[71,737,734],{"__ignoreMap":84},[60,739,741],{"id":740},"manifestjson","manifest.json",[79,743,747],{"className":744,"code":745,"language":746,"meta":84,"style":84},"language-json shiki shiki-themes vitesse-light vitesse-light","{\n  \"manifest_version\": 3,\n  \"name\": \"Table Data Copier\",\n  \"version\": \"1.0.0\",\n  \"description\": \"ウェブページのテーブルデータを簡単にコピーできるChrome拡張機能\",\n  \"permissions\": [\n    \"activeTab\",\n    \"clipboardWrite\"\n  ],\n  \"content_scripts\": [\n    {\n      \"matches\": [\"\u003Call_urls>\"],\n      \"js\": [\"content.js\"],\n      \"css\": [\"content.css\"]\n    }\n  ],\n  \"action\": {\n    \"default_popup\": \"popup.html\"\n  }\n}\n","json",[71,748,749,754,775,796,816,836,850,862,871,876,889,895,921,944,968,974,979,994,1013,1019],{"__ignoreMap":84},[88,750,751],{"class":90,"line":91},[88,752,753],{"class":94},"{\n",[88,755,756,760,764,766,768,772],{"class":90,"line":122},[88,757,759],{"class":758},"sqvqQ","  \"",[88,761,763],{"class":762},"sz8Xr","manifest_version",[88,765,110],{"class":758},[88,767,494],{"class":94},[88,769,771],{"class":770},"sM54T"," 3",[88,773,774],{"class":94},",\n",[88,776,777,779,782,784,786,789,792,794],{"class":90,"line":143},[88,778,759],{"class":758},[88,780,781],{"class":762},"name",[88,783,110],{"class":758},[88,785,494],{"class":94},[88,787,788],{"class":109}," \"",[88,790,791],{"class":113},"Table Data Copier",[88,793,110],{"class":109},[88,795,774],{"class":94},[88,797,798,800,803,805,807,809,812,814],{"class":90,"line":164},[88,799,759],{"class":758},[88,801,802],{"class":762},"version",[88,804,110],{"class":758},[88,806,494],{"class":94},[88,808,788],{"class":109},[88,810,811],{"class":113},"1.0.0",[88,813,110],{"class":109},[88,815,774],{"class":94},[88,817,818,820,823,825,827,829,832,834],{"class":90,"line":185},[88,819,759],{"class":758},[88,821,822],{"class":762},"description",[88,824,110],{"class":758},[88,826,494],{"class":94},[88,828,788],{"class":109},[88,830,831],{"class":113},"ウェブページのテーブルデータを簡単にコピーできるChrome拡張機能",[88,833,110],{"class":109},[88,835,774],{"class":94},[88,837,838,840,843,845,847],{"class":90,"line":218},[88,839,759],{"class":758},[88,841,842],{"class":762},"permissions",[88,844,110],{"class":758},[88,846,494],{"class":94},[88,848,849],{"class":94}," [\n",[88,851,852,855,858,860],{"class":90,"line":228},[88,853,854],{"class":109},"    \"",[88,856,857],{"class":113},"activeTab",[88,859,110],{"class":109},[88,861,774],{"class":94},[88,863,864,866,869],{"class":90,"line":238},[88,865,854],{"class":109},[88,867,868],{"class":113},"clipboardWrite",[88,870,684],{"class":109},[88,872,873],{"class":90,"line":248},[88,874,875],{"class":94},"  ],\n",[88,877,878,880,883,885,887],{"class":90,"line":409},[88,879,759],{"class":758},[88,881,882],{"class":762},"content_scripts",[88,884,110],{"class":758},[88,886,494],{"class":94},[88,888,849],{"class":94},[88,890,892],{"class":90,"line":891},11,[88,893,894],{"class":94},"    {\n",[88,896,898,901,904,906,908,911,913,916,918],{"class":90,"line":897},12,[88,899,900],{"class":758},"      \"",[88,902,903],{"class":762},"matches",[88,905,110],{"class":758},[88,907,494],{"class":94},[88,909,910],{"class":94}," [",[88,912,110],{"class":109},[88,914,915],{"class":113},"\u003Call_urls>",[88,917,110],{"class":109},[88,919,920],{"class":94},"],\n",[88,922,924,926,929,931,933,935,937,940,942],{"class":90,"line":923},13,[88,925,900],{"class":758},[88,927,928],{"class":762},"js",[88,930,110],{"class":758},[88,932,494],{"class":94},[88,934,910],{"class":94},[88,936,110],{"class":109},[88,938,939],{"class":113},"content.js",[88,941,110],{"class":109},[88,943,920],{"class":94},[88,945,947,949,952,954,956,958,960,963,965],{"class":90,"line":946},14,[88,948,900],{"class":758},[88,950,951],{"class":762},"css",[88,953,110],{"class":758},[88,955,494],{"class":94},[88,957,910],{"class":94},[88,959,110],{"class":109},[88,961,962],{"class":113},"content.css",[88,964,110],{"class":109},[88,966,967],{"class":94},"]\n",[88,969,971],{"class":90,"line":970},15,[88,972,973],{"class":94},"    }\n",[88,975,977],{"class":90,"line":976},16,[88,978,875],{"class":94},[88,980,982,984,987,989,991],{"class":90,"line":981},17,[88,983,759],{"class":758},[88,985,986],{"class":762},"action",[88,988,110],{"class":758},[88,990,494],{"class":94},[88,992,993],{"class":94}," {\n",[88,995,997,999,1002,1004,1006,1008,1011],{"class":90,"line":996},18,[88,998,854],{"class":758},[88,1000,1001],{"class":762},"default_popup",[88,1003,110],{"class":758},[88,1005,494],{"class":94},[88,1007,788],{"class":109},[88,1009,1010],{"class":113},"popup.html",[88,1012,684],{"class":109},[88,1014,1016],{"class":90,"line":1015},19,[88,1017,1018],{"class":94},"  }\n",[88,1020,1022],{"class":90,"line":1021},20,[88,1023,1024],{"class":94},"}\n",[18,1026,1027,1030],{},[21,1028,1029],{},"注意",": アイコン参照は、実際にアイコンファイルを作成するまで含めない。",[60,1032,1034],{"id":1033},"contentjs-の核心実装","content.js の核心実装",[1036,1037,1039],"h4",{"id":1038},"_1-ヘッダーの複数行抽出","1. ヘッダーの複数行抽出",[79,1041,1043],{"className":497,"code":1042,"language":499,"meta":84,"style":84},"extractHeaderRows(headerRow) {\n  const cellElements = Array.from(headerRow.children);\n\n  // セルを位置順にソート（重要！）\n  cellElements.sort((a, b) => {\n    const leftA = parseInt(a.style.left) || 0;\n    const leftB = parseInt(b.style.left) || 0;\n    return leftA - leftB;\n  });\n\n  // 各セルのテキストを取得し、改行で分割\n  const cellTexts = cellElements.map(cell => {\n    // まずlabel要素を試す（別のテーブル形式に対応）\n    const labels = cell.querySelectorAll('label');\n    if (labels.length > 0) {\n      const texts = Array.from(labels).map(label => label.textContent.trim()).filter(t => t);\n      return texts.length > 0 ? texts : [''];\n    }\n\n    // label要素がない場合は、textContentを改行で分割（重要！）\n    const text = cell.textContent.trim();\n    const lines = text.split('\\n').map(line => line.trim()).filter(line => line);\n    return lines.length > 0 ? lines : [''];\n  });\n\n  // 最大行数を取得\n  const maxRows = Math.max(...cellTexts.map(texts => texts.length));\n\n  // 複数行のヘッダーを構築（転置）\n  const headerRows = [];\n  for (let i = 0; i \u003C maxRows; i++) {\n    const row = cellTexts.map(texts => texts[i] || '');\n    headerRows.push(row);\n  }\n\n  return headerRows;\n}\n",[71,1044,1045,1060,1089,1093,1098,1125,1163,1195,1209,1214,1218,1223,1247,1252,1276,1301,1358,1389,1393,1397,1402,1423,1476,1503,1508,1513,1519,1563,1568,1574,1587,1626,1666,1684,1689,1694,1704],{"__ignoreMap":84},[88,1046,1047,1050,1052,1055,1058],{"class":90,"line":91},[88,1048,1049],{"class":527},"extractHeaderRows",[88,1051,530],{"class":94},[88,1053,1054],{"class":102},"headerRow",[88,1056,1057],{"class":94},")",[88,1059,993],{"class":94},[88,1061,1062,1065,1068,1070,1073,1075,1078,1080,1082,1084,1087],{"class":90,"line":122},[88,1063,1064],{"class":511},"  const",[88,1066,1067],{"class":102}," cellElements",[88,1069,518],{"class":94},[88,1071,1072],{"class":102}," Array",[88,1074,524],{"class":94},[88,1076,1077],{"class":527},"from",[88,1079,530],{"class":94},[88,1081,1054],{"class":102},[88,1083,524],{"class":94},[88,1085,1086],{"class":102},"children",[88,1088,541],{"class":94},[88,1090,1091],{"class":90,"line":143},[88,1092,468],{"emptyLinePlaceholder":467},[88,1094,1095],{"class":90,"line":164},[88,1096,1097],{"class":296},"  // セルを位置順にソート（重要！）\n",[88,1099,1100,1103,1105,1108,1111,1113,1116,1119,1121,1123],{"class":90,"line":185},[88,1101,1102],{"class":102},"  cellElements",[88,1104,524],{"class":94},[88,1106,1107],{"class":527},"sort",[88,1109,1110],{"class":94},"((",[88,1112,26],{"class":102},[88,1114,1115],{"class":94},",",[88,1117,1118],{"class":102}," b",[88,1120,1057],{"class":94},[88,1122,619],{"class":94},[88,1124,993],{"class":94},[88,1126,1127,1130,1133,1135,1138,1140,1142,1144,1147,1149,1152,1154,1157,1160],{"class":90,"line":218},[88,1128,1129],{"class":511},"    const",[88,1131,1132],{"class":102}," leftA",[88,1134,518],{"class":94},[88,1136,1137],{"class":527}," parseInt",[88,1139,530],{"class":94},[88,1141,26],{"class":102},[88,1143,524],{"class":94},[88,1145,1146],{"class":102},"style",[88,1148,524],{"class":94},[88,1150,1151],{"class":102},"left",[88,1153,1057],{"class":94},[88,1155,1156],{"class":511}," ||",[88,1158,1159],{"class":770}," 0",[88,1161,1162],{"class":94},";\n",[88,1164,1165,1167,1170,1172,1174,1176,1179,1181,1183,1185,1187,1189,1191,1193],{"class":90,"line":228},[88,1166,1129],{"class":511},[88,1168,1169],{"class":102}," leftB",[88,1171,518],{"class":94},[88,1173,1137],{"class":527},[88,1175,530],{"class":94},[88,1177,1178],{"class":102},"b",[88,1180,524],{"class":94},[88,1182,1146],{"class":102},[88,1184,524],{"class":94},[88,1186,1151],{"class":102},[88,1188,1057],{"class":94},[88,1190,1156],{"class":511},[88,1192,1159],{"class":770},[88,1194,1162],{"class":94},[88,1196,1197,1200,1202,1205,1207],{"class":90,"line":238},[88,1198,1199],{"class":98},"    return",[88,1201,1132],{"class":102},[88,1203,1204],{"class":511}," -",[88,1206,1169],{"class":102},[88,1208,1162],{"class":94},[88,1210,1211],{"class":90,"line":248},[88,1212,1213],{"class":94},"  });\n",[88,1215,1216],{"class":90,"line":409},[88,1217,468],{"emptyLinePlaceholder":467},[88,1219,1220],{"class":90,"line":891},[88,1221,1222],{"class":296},"  // 各セルのテキストを取得し、改行で分割\n",[88,1224,1225,1227,1230,1232,1234,1236,1238,1240,1243,1245],{"class":90,"line":897},[88,1226,1064],{"class":511},[88,1228,1229],{"class":102}," cellTexts",[88,1231,518],{"class":94},[88,1233,1067],{"class":102},[88,1235,524],{"class":94},[88,1237,612],{"class":527},[88,1239,530],{"class":94},[88,1241,1242],{"class":102},"cell",[88,1244,619],{"class":94},[88,1246,993],{"class":94},[88,1248,1249],{"class":90,"line":923},[88,1250,1251],{"class":296},"    // まずlabel要素を試す（別のテーブル形式に対応）\n",[88,1253,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274],{"class":90,"line":946},[88,1255,1129],{"class":511},[88,1257,515],{"class":102},[88,1259,518],{"class":94},[88,1261,521],{"class":102},[88,1263,524],{"class":94},[88,1265,276],{"class":527},[88,1267,530],{"class":94},[88,1269,533],{"class":109},[88,1271,536],{"class":113},[88,1273,533],{"class":109},[88,1275,541],{"class":94},[88,1277,1278,1281,1284,1287,1289,1292,1295,1297,1299],{"class":90,"line":970},[88,1279,1280],{"class":98},"    if",[88,1282,1283],{"class":94}," (",[88,1285,1286],{"class":102},"labels",[88,1288,524],{"class":94},[88,1290,1291],{"class":762},"length",[88,1293,1294],{"class":94}," >",[88,1296,1159],{"class":770},[88,1298,1057],{"class":94},[88,1300,993],{"class":94},[88,1302,1303,1306,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1334,1336,1338,1340,1342,1344,1346,1348,1351,1353,1356],{"class":90,"line":976},[88,1304,1305],{"class":511},"      const",[88,1307,1308],{"class":102}," texts",[88,1310,518],{"class":94},[88,1312,1072],{"class":102},[88,1314,524],{"class":94},[88,1316,1077],{"class":527},[88,1318,530],{"class":94},[88,1320,1286],{"class":102},[88,1322,609],{"class":94},[88,1324,612],{"class":527},[88,1326,530],{"class":94},[88,1328,536],{"class":102},[88,1330,619],{"class":94},[88,1332,1333],{"class":102}," label",[88,1335,524],{"class":94},[88,1337,572],{"class":102},[88,1339,524],{"class":94},[88,1341,577],{"class":527},[88,1343,629],{"class":94},[88,1345,632],{"class":527},[88,1347,530],{"class":94},[88,1349,1350],{"class":102},"t",[88,1352,619],{"class":94},[88,1354,1355],{"class":102}," t",[88,1357,541],{"class":94},[88,1359,1360,1363,1365,1367,1369,1371,1373,1376,1378,1381,1383,1386],{"class":90,"line":981},[88,1361,1362],{"class":98},"      return",[88,1364,1308],{"class":102},[88,1366,524],{"class":94},[88,1368,1291],{"class":762},[88,1370,1294],{"class":94},[88,1372,1159],{"class":770},[88,1374,1375],{"class":511}," ?",[88,1377,1308],{"class":102},[88,1379,1380],{"class":511}," :",[88,1382,910],{"class":94},[88,1384,1385],{"class":109},"''",[88,1387,1388],{"class":94},"];\n",[88,1390,1391],{"class":90,"line":996},[88,1392,973],{"class":94},[88,1394,1395],{"class":90,"line":1015},[88,1396,468],{"emptyLinePlaceholder":467},[88,1398,1399],{"class":90,"line":1021},[88,1400,1401],{"class":296},"    // label要素がない場合は、textContentを改行で分割（重要！）\n",[88,1403,1405,1407,1409,1411,1413,1415,1417,1419,1421],{"class":90,"line":1404},21,[88,1406,1129],{"class":511},[88,1408,563],{"class":102},[88,1410,518],{"class":94},[88,1412,521],{"class":102},[88,1414,524],{"class":94},[88,1416,572],{"class":102},[88,1418,524],{"class":94},[88,1420,577],{"class":527},[88,1422,580],{"class":94},[88,1424,1426,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474],{"class":90,"line":1425},22,[88,1427,1129],{"class":511},[88,1429,587],{"class":102},[88,1431,518],{"class":94},[88,1433,563],{"class":102},[88,1435,524],{"class":94},[88,1437,596],{"class":527},[88,1439,530],{"class":94},[88,1441,533],{"class":109},[88,1443,604],{"class":603},[88,1445,533],{"class":109},[88,1447,609],{"class":94},[88,1449,612],{"class":527},[88,1451,530],{"class":94},[88,1453,90],{"class":102},[88,1455,619],{"class":94},[88,1457,622],{"class":102},[88,1459,524],{"class":94},[88,1461,577],{"class":527},[88,1463,629],{"class":94},[88,1465,632],{"class":527},[88,1467,530],{"class":94},[88,1469,90],{"class":102},[88,1471,619],{"class":94},[88,1473,622],{"class":102},[88,1475,541],{"class":94},[88,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501],{"class":90,"line":1478},23,[88,1480,1199],{"class":98},[88,1482,587],{"class":102},[88,1484,524],{"class":94},[88,1486,1291],{"class":762},[88,1488,1294],{"class":94},[88,1490,1159],{"class":770},[88,1492,1375],{"class":511},[88,1494,587],{"class":102},[88,1496,1380],{"class":511},[88,1498,910],{"class":94},[88,1500,1385],{"class":109},[88,1502,1388],{"class":94},[88,1504,1506],{"class":90,"line":1505},24,[88,1507,1213],{"class":94},[88,1509,1511],{"class":90,"line":1510},25,[88,1512,468],{"emptyLinePlaceholder":467},[88,1514,1516],{"class":90,"line":1515},26,[88,1517,1518],{"class":296},"  // 最大行数を取得\n",[88,1520,1522,1524,1527,1529,1532,1534,1537,1540,1543,1545,1547,1549,1552,1554,1556,1558,1560],{"class":90,"line":1521},27,[88,1523,1064],{"class":511},[88,1525,1526],{"class":102}," maxRows",[88,1528,518],{"class":94},[88,1530,1531],{"class":102}," Math",[88,1533,524],{"class":94},[88,1535,1536],{"class":527},"max",[88,1538,1539],{"class":94},"(...",[88,1541,1542],{"class":102},"cellTexts",[88,1544,524],{"class":94},[88,1546,612],{"class":527},[88,1548,530],{"class":94},[88,1550,1551],{"class":102},"texts",[88,1553,619],{"class":94},[88,1555,1308],{"class":102},[88,1557,524],{"class":94},[88,1559,1291],{"class":762},[88,1561,1562],{"class":94},"));\n",[88,1564,1566],{"class":90,"line":1565},28,[88,1567,468],{"emptyLinePlaceholder":467},[88,1569,1571],{"class":90,"line":1570},29,[88,1572,1573],{"class":296},"  // 複数行のヘッダーを構築（転置）\n",[88,1575,1577,1579,1582,1584],{"class":90,"line":1576},30,[88,1578,1064],{"class":511},[88,1580,1581],{"class":102}," headerRows",[88,1583,518],{"class":94},[88,1585,1586],{"class":94}," [];\n",[88,1588,1590,1593,1595,1598,1601,1603,1605,1608,1610,1613,1615,1617,1619,1622,1624],{"class":90,"line":1589},31,[88,1591,1592],{"class":98},"  for",[88,1594,1283],{"class":94},[88,1596,1597],{"class":511},"let",[88,1599,1600],{"class":102}," i",[88,1602,518],{"class":94},[88,1604,1159],{"class":770},[88,1606,1607],{"class":94},";",[88,1609,1600],{"class":102},[88,1611,1612],{"class":94}," \u003C",[88,1614,1526],{"class":102},[88,1616,1607],{"class":94},[88,1618,1600],{"class":102},[88,1620,1621],{"class":511},"++",[88,1623,1057],{"class":94},[88,1625,993],{"class":94},[88,1627,1629,1631,1634,1636,1638,1640,1642,1644,1646,1648,1650,1653,1656,1659,1661,1664],{"class":90,"line":1628},32,[88,1630,1129],{"class":511},[88,1632,1633],{"class":102}," row",[88,1635,518],{"class":94},[88,1637,1229],{"class":102},[88,1639,524],{"class":94},[88,1641,612],{"class":527},[88,1643,530],{"class":94},[88,1645,1551],{"class":102},[88,1647,619],{"class":94},[88,1649,1308],{"class":102},[88,1651,1652],{"class":94},"[",[88,1654,1655],{"class":102},"i",[88,1657,1658],{"class":94},"]",[88,1660,1156],{"class":511},[88,1662,1663],{"class":109}," ''",[88,1665,541],{"class":94},[88,1667,1669,1672,1674,1677,1679,1682],{"class":90,"line":1668},33,[88,1670,1671],{"class":102},"    headerRows",[88,1673,524],{"class":94},[88,1675,1676],{"class":527},"push",[88,1678,530],{"class":94},[88,1680,1681],{"class":102},"row",[88,1683,541],{"class":94},[88,1685,1687],{"class":90,"line":1686},34,[88,1688,1018],{"class":94},[88,1690,1692],{"class":90,"line":1691},35,[88,1693,468],{"emptyLinePlaceholder":467},[88,1695,1697,1700,1702],{"class":90,"line":1696},36,[88,1698,1699],{"class":98},"  return",[88,1701,1581],{"class":102},[88,1703,1162],{"class":94},[88,1705,1707],{"class":90,"line":1706},37,[88,1708,1024],{"class":94},[18,1710,1711,494],{},[21,1712,1713],{},"ポイント",[266,1715,1716,1719,1722,1725],{},[269,1717,1718],{},"label要素の有無を確認（フォールバック対応）",[269,1720,1721],{},"textContentを改行で分割",[269,1723,1724],{},"空行をフィルタリング",[269,1726,1727],{},"転置処理で複数行のヘッダーを構築",[1036,1729,1731],{"id":1730},"_2-仮想スクロール対応の自動スクロール","2. 仮想スクロール対応の自動スクロール",[79,1733,1735],{"className":497,"code":1734,"language":499,"meta":84,"style":84},"async copyTableDataWithScroll(table, button) {\n  const scrollContainer = table.querySelector('.table-styles__table__scrollContainer___WBAWY');\n\n  if (!scrollContainer) {\n    // スクロールコンテナがない場合は通常のコピー\n    this.copyTableData(table);\n    return;\n  }\n\n  // ボタンを無効化\n  const originalText = button.textContent;\n  button.disabled = true;\n  button.textContent = '読み込み中...';\n\n  try {\n    // 全データを収集するためのMap（重複排除）\n    const allItemsMap = new Map();\n\n    // ヘッダー行を先に取得（複数行に分割）\n    const headerRow = table.querySelector('.table-styles__table__head___Uu9qm .table-styles__table__row___K6TSS');\n    let headerRows = [];\n    if (headerRow) {\n      headerRows = this.extractHeaderRows(headerRow);\n    }\n\n    // 現在のスクロール位置を保存\n    const originalScrollTop = scrollContainer.scrollTop;\n\n    // スクロールコンテナの高さ\n    const containerHeight = scrollContainer.clientHeight;\n    const scrollHeight = scrollContainer.scrollHeight;\n\n    // スクロールしながらデータを収集\n    let currentScroll = 0;\n    const scrollStep = containerHeight / 2; // 半画面ずつスクロール\n\n    while (currentScroll \u003C= scrollHeight) {\n      scrollContainer.scrollTop = currentScroll;\n\n      // DOMが更新されるまで少し待つ（重要！）\n      await new Promise(resolve => setTimeout(resolve, 100));\n\n      // 現在表示されているグループヘッダーを収集\n      const groupHeaders = scrollContainer.querySelectorAll('.table-styles__table__groupHeader___vPA4c');\n      groupHeaders.forEach(groupHeader => {\n        const topPosition = groupHeader.style.top;\n        if (!topPosition) return;\n\n        const groupText = this.extractTextContent(groupHeader);\n        if (groupText && !allItemsMap.has(topPosition)) {\n          allItemsMap.set(topPosition, {\n            top: parseInt(topPosition),\n            type: 'group',\n            data: [groupText]\n          });\n        }\n      });\n\n      // 現在表示されているデータ行を収集\n      const rows = scrollContainer.querySelectorAll('.table-styles__table__row___K6TSS');\n      rows.forEach(row => {\n        // ヘッダー行は除外\n        if (row.closest('.table-styles__table__head___Uu9qm')) return;\n\n        // 行の位置をキーとして使用（top位置で識別）\n        const topPosition = row.style.top;\n        if (!topPosition) return;\n\n        // まだ収集していない行のみ追加\n        if (!allItemsMap.has(topPosition)) {\n          const rowData = this.extractRowData(row);\n          if (rowData.length > 0 && rowData[0]) { // 空行を除外\n            allItemsMap.set(topPosition, {\n              top: parseInt(topPosition),\n              type: 'row',\n              data: rowData\n            });\n          }\n        }\n      });\n\n      // 進捗を表示\n      const progress = Math.min(100, Math.round((currentScroll / scrollHeight) * 100));\n      button.textContent = `読み込み中... ${progress}%`;\n\n      currentScroll += scrollStep;\n    }\n\n    // 元のスクロール位置に戻す\n    scrollContainer.scrollTop = originalScrollTop;\n\n    // 収集したデータをtop位置でソートして配列に変換\n    const sortedItems = Array.from(allItemsMap.values())\n      .sort((a, b) => a.top - b.top);\n\n    // 最終的なデータ配列を構築\n    const finalData = [];\n\n    // ヘッダーを追加（複数行）\n    if (headerRows && headerRows.length > 0) {\n      headerRows.forEach(row => {\n        finalData.push(row);\n      });\n    }\n\n    // グループヘッダーとデータ行を位置順に追加\n    sortedItems.forEach(item => {\n      finalData.push(item.data);\n    });\n\n    // TSV形式に変換\n    const tsv = finalData.map(row => row.join('\\t')).join('\\n');\n\n    // クリップボードにコピー\n    await navigator.clipboard.writeText(tsv);\n\n    const dataRowCount = sortedItems.filter(item => item.type === 'row').length;\n    button.textContent = originalText;\n    button.disabled = false;\n    this.showNotification(`テーブルデータをコピーしました！（${dataRowCount}行）`);\n\n  } catch (error) {\n    console.error('テーブルデータの抽出に失敗しました:', error);\n    button.textContent = originalText;\n    button.disabled = false;\n    this.showNotification('エラーが発生しました', true);\n  }\n}\n",[71,1736,1737,1759,1787,1791,1808,1813,1829,1835,1839,1843,1848,1865,1882,1902,1906,1913,1918,1935,1939,1944,1970,1981,1993,2013,2017,2021,2026,2044,2048,2053,2071,2089,2093,2098,2111,2133,2137,2156,2172,2177,2183,2215,2220,2226,2253,2273,2298,2318,2323,2346,2379,2398,2415,2432,2446,2452,2458,2464,2469,2475,2502,2520,2526,2555,2560,2566,2587,2604,2609,2615,2638,2662,2699,2717,2733,2749,2760,2766,2772,2777,2782,2787,2793,2841,2876,2881,2894,2899,2904,2910,2926,2931,2937,2965,3002,3007,3013,3025,3030,3036,3062,3079,3095,3100,3105,3110,3116,3135,3156,3162,3167,3173,3226,3231,3237,3263,3268,3313,3329,3345,3376,3381,3399,3425,3440,3455,3479,3484],{"__ignoreMap":84},[88,1738,1739,1742,1745,1747,1750,1752,1755,1757],{"class":90,"line":91},[88,1740,1741],{"class":102},"async",[88,1743,1744],{"class":527}," copyTableDataWithScroll",[88,1746,530],{"class":94},[88,1748,1749],{"class":102},"table",[88,1751,1115],{"class":94},[88,1753,1754],{"class":102}," button",[88,1756,1057],{"class":94},[88,1758,993],{"class":94},[88,1760,1761,1763,1766,1768,1771,1773,1776,1778,1780,1783,1785],{"class":90,"line":122},[88,1762,1064],{"class":511},[88,1764,1765],{"class":102}," scrollContainer",[88,1767,518],{"class":94},[88,1769,1770],{"class":102}," table",[88,1772,524],{"class":94},[88,1774,1775],{"class":527},"querySelector",[88,1777,530],{"class":94},[88,1779,533],{"class":109},[88,1781,1782],{"class":113},".table-styles__table__scrollContainer___WBAWY",[88,1784,533],{"class":109},[88,1786,541],{"class":94},[88,1788,1789],{"class":90,"line":143},[88,1790,468],{"emptyLinePlaceholder":467},[88,1792,1793,1796,1798,1801,1804,1806],{"class":90,"line":164},[88,1794,1795],{"class":98},"  if",[88,1797,1283],{"class":94},[88,1799,1800],{"class":511},"!",[88,1802,1803],{"class":102},"scrollContainer",[88,1805,1057],{"class":94},[88,1807,993],{"class":94},[88,1809,1810],{"class":90,"line":185},[88,1811,1812],{"class":296},"    // スクロールコンテナがない場合は通常のコピー\n",[88,1814,1815,1818,1820,1823,1825,1827],{"class":90,"line":218},[88,1816,1817],{"class":603},"    this",[88,1819,524],{"class":94},[88,1821,1822],{"class":527},"copyTableData",[88,1824,530],{"class":94},[88,1826,1749],{"class":102},[88,1828,541],{"class":94},[88,1830,1831,1833],{"class":90,"line":228},[88,1832,1199],{"class":98},[88,1834,1162],{"class":94},[88,1836,1837],{"class":90,"line":238},[88,1838,1018],{"class":94},[88,1840,1841],{"class":90,"line":248},[88,1842,468],{"emptyLinePlaceholder":467},[88,1844,1845],{"class":90,"line":409},[88,1846,1847],{"class":296},"  // ボタンを無効化\n",[88,1849,1850,1852,1855,1857,1859,1861,1863],{"class":90,"line":891},[88,1851,1064],{"class":511},[88,1853,1854],{"class":102}," originalText",[88,1856,518],{"class":94},[88,1858,1754],{"class":102},[88,1860,524],{"class":94},[88,1862,572],{"class":102},[88,1864,1162],{"class":94},[88,1866,1867,1870,1872,1875,1877,1880],{"class":90,"line":897},[88,1868,1869],{"class":102},"  button",[88,1871,524],{"class":94},[88,1873,1874],{"class":102},"disabled",[88,1876,518],{"class":94},[88,1878,1879],{"class":98}," true",[88,1881,1162],{"class":94},[88,1883,1884,1886,1888,1890,1892,1895,1898,1900],{"class":90,"line":923},[88,1885,1869],{"class":102},[88,1887,524],{"class":94},[88,1889,572],{"class":102},[88,1891,518],{"class":94},[88,1893,1894],{"class":109}," '",[88,1896,1897],{"class":113},"読み込み中...",[88,1899,533],{"class":109},[88,1901,1162],{"class":94},[88,1903,1904],{"class":90,"line":946},[88,1905,468],{"emptyLinePlaceholder":467},[88,1907,1908,1911],{"class":90,"line":970},[88,1909,1910],{"class":98},"  try",[88,1912,993],{"class":94},[88,1914,1915],{"class":90,"line":976},[88,1916,1917],{"class":296},"    // 全データを収集するためのMap（重複排除）\n",[88,1919,1920,1922,1925,1927,1930,1933],{"class":90,"line":981},[88,1921,1129],{"class":511},[88,1923,1924],{"class":102}," allItemsMap",[88,1926,518],{"class":94},[88,1928,1929],{"class":511}," new",[88,1931,1932],{"class":527}," Map",[88,1934,580],{"class":94},[88,1936,1937],{"class":90,"line":996},[88,1938,468],{"emptyLinePlaceholder":467},[88,1940,1941],{"class":90,"line":1015},[88,1942,1943],{"class":296},"    // ヘッダー行を先に取得（複数行に分割）\n",[88,1945,1946,1948,1951,1953,1955,1957,1959,1961,1963,1966,1968],{"class":90,"line":1021},[88,1947,1129],{"class":511},[88,1949,1950],{"class":102}," headerRow",[88,1952,518],{"class":94},[88,1954,1770],{"class":102},[88,1956,524],{"class":94},[88,1958,1775],{"class":527},[88,1960,530],{"class":94},[88,1962,533],{"class":109},[88,1964,1965],{"class":113},".table-styles__table__head___Uu9qm .table-styles__table__row___K6TSS",[88,1967,533],{"class":109},[88,1969,541],{"class":94},[88,1971,1972,1975,1977,1979],{"class":90,"line":1404},[88,1973,1974],{"class":511},"    let",[88,1976,1581],{"class":102},[88,1978,518],{"class":94},[88,1980,1586],{"class":94},[88,1982,1983,1985,1987,1989,1991],{"class":90,"line":1425},[88,1984,1280],{"class":98},[88,1986,1283],{"class":94},[88,1988,1054],{"class":102},[88,1990,1057],{"class":94},[88,1992,993],{"class":94},[88,1994,1995,1998,2000,2003,2005,2007,2009,2011],{"class":90,"line":1478},[88,1996,1997],{"class":102},"      headerRows",[88,1999,518],{"class":94},[88,2001,2002],{"class":603}," this",[88,2004,524],{"class":94},[88,2006,1049],{"class":527},[88,2008,530],{"class":94},[88,2010,1054],{"class":102},[88,2012,541],{"class":94},[88,2014,2015],{"class":90,"line":1505},[88,2016,973],{"class":94},[88,2018,2019],{"class":90,"line":1510},[88,2020,468],{"emptyLinePlaceholder":467},[88,2022,2023],{"class":90,"line":1515},[88,2024,2025],{"class":296},"    // 現在のスクロール位置を保存\n",[88,2027,2028,2030,2033,2035,2037,2039,2042],{"class":90,"line":1521},[88,2029,1129],{"class":511},[88,2031,2032],{"class":102}," originalScrollTop",[88,2034,518],{"class":94},[88,2036,1765],{"class":102},[88,2038,524],{"class":94},[88,2040,2041],{"class":102},"scrollTop",[88,2043,1162],{"class":94},[88,2045,2046],{"class":90,"line":1565},[88,2047,468],{"emptyLinePlaceholder":467},[88,2049,2050],{"class":90,"line":1570},[88,2051,2052],{"class":296},"    // スクロールコンテナの高さ\n",[88,2054,2055,2057,2060,2062,2064,2066,2069],{"class":90,"line":1576},[88,2056,1129],{"class":511},[88,2058,2059],{"class":102}," containerHeight",[88,2061,518],{"class":94},[88,2063,1765],{"class":102},[88,2065,524],{"class":94},[88,2067,2068],{"class":102},"clientHeight",[88,2070,1162],{"class":94},[88,2072,2073,2075,2078,2080,2082,2084,2087],{"class":90,"line":1589},[88,2074,1129],{"class":511},[88,2076,2077],{"class":102}," scrollHeight",[88,2079,518],{"class":94},[88,2081,1765],{"class":102},[88,2083,524],{"class":94},[88,2085,2086],{"class":102},"scrollHeight",[88,2088,1162],{"class":94},[88,2090,2091],{"class":90,"line":1628},[88,2092,468],{"emptyLinePlaceholder":467},[88,2094,2095],{"class":90,"line":1668},[88,2096,2097],{"class":296},"    // スクロールしながらデータを収集\n",[88,2099,2100,2102,2105,2107,2109],{"class":90,"line":1686},[88,2101,1974],{"class":511},[88,2103,2104],{"class":102}," currentScroll",[88,2106,518],{"class":94},[88,2108,1159],{"class":770},[88,2110,1162],{"class":94},[88,2112,2113,2115,2118,2120,2122,2125,2128,2130],{"class":90,"line":1691},[88,2114,1129],{"class":511},[88,2116,2117],{"class":102}," scrollStep",[88,2119,518],{"class":94},[88,2121,2059],{"class":102},[88,2123,2124],{"class":511}," /",[88,2126,2127],{"class":770}," 2",[88,2129,1607],{"class":94},[88,2131,2132],{"class":296}," // 半画面ずつスクロール\n",[88,2134,2135],{"class":90,"line":1696},[88,2136,468],{"emptyLinePlaceholder":467},[88,2138,2139,2142,2144,2147,2150,2152,2154],{"class":90,"line":1706},[88,2140,2141],{"class":98},"    while",[88,2143,1283],{"class":94},[88,2145,2146],{"class":102},"currentScroll",[88,2148,2149],{"class":94}," \u003C=",[88,2151,2077],{"class":102},[88,2153,1057],{"class":94},[88,2155,993],{"class":94},[88,2157,2159,2162,2164,2166,2168,2170],{"class":90,"line":2158},38,[88,2160,2161],{"class":102},"      scrollContainer",[88,2163,524],{"class":94},[88,2165,2041],{"class":102},[88,2167,518],{"class":94},[88,2169,2104],{"class":102},[88,2171,1162],{"class":94},[88,2173,2175],{"class":90,"line":2174},39,[88,2176,468],{"emptyLinePlaceholder":467},[88,2178,2180],{"class":90,"line":2179},40,[88,2181,2182],{"class":296},"      // DOMが更新されるまで少し待つ（重要！）\n",[88,2184,2186,2189,2191,2194,2196,2199,2201,2204,2206,2208,2210,2213],{"class":90,"line":2185},41,[88,2187,2188],{"class":98},"      await",[88,2190,1929],{"class":511},[88,2192,2193],{"class":762}," Promise",[88,2195,530],{"class":94},[88,2197,2198],{"class":102},"resolve",[88,2200,619],{"class":94},[88,2202,2203],{"class":527}," setTimeout",[88,2205,530],{"class":94},[88,2207,2198],{"class":102},[88,2209,1115],{"class":94},[88,2211,2212],{"class":770}," 100",[88,2214,1562],{"class":94},[88,2216,2218],{"class":90,"line":2217},42,[88,2219,468],{"emptyLinePlaceholder":467},[88,2221,2223],{"class":90,"line":2222},43,[88,2224,2225],{"class":296},"      // 現在表示されているグループヘッダーを収集\n",[88,2227,2229,2231,2234,2236,2238,2240,2242,2244,2246,2249,2251],{"class":90,"line":2228},44,[88,2230,1305],{"class":511},[88,2232,2233],{"class":102}," groupHeaders",[88,2235,518],{"class":94},[88,2237,1765],{"class":102},[88,2239,524],{"class":94},[88,2241,276],{"class":527},[88,2243,530],{"class":94},[88,2245,533],{"class":109},[88,2247,2248],{"class":113},".table-styles__table__groupHeader___vPA4c",[88,2250,533],{"class":109},[88,2252,541],{"class":94},[88,2254,2256,2259,2261,2264,2266,2269,2271],{"class":90,"line":2255},45,[88,2257,2258],{"class":102},"      groupHeaders",[88,2260,524],{"class":94},[88,2262,2263],{"class":527},"forEach",[88,2265,530],{"class":94},[88,2267,2268],{"class":102},"groupHeader",[88,2270,619],{"class":94},[88,2272,993],{"class":94},[88,2274,2276,2279,2282,2284,2287,2289,2291,2293,2296],{"class":90,"line":2275},46,[88,2277,2278],{"class":511},"        const",[88,2280,2281],{"class":102}," topPosition",[88,2283,518],{"class":94},[88,2285,2286],{"class":102}," groupHeader",[88,2288,524],{"class":94},[88,2290,1146],{"class":102},[88,2292,524],{"class":94},[88,2294,2295],{"class":102},"top",[88,2297,1162],{"class":94},[88,2299,2301,2304,2306,2308,2311,2313,2316],{"class":90,"line":2300},47,[88,2302,2303],{"class":98},"        if",[88,2305,1283],{"class":94},[88,2307,1800],{"class":511},[88,2309,2310],{"class":102},"topPosition",[88,2312,1057],{"class":94},[88,2314,2315],{"class":98}," return",[88,2317,1162],{"class":94},[88,2319,2321],{"class":90,"line":2320},48,[88,2322,468],{"emptyLinePlaceholder":467},[88,2324,2326,2328,2331,2333,2335,2337,2340,2342,2344],{"class":90,"line":2325},49,[88,2327,2278],{"class":511},[88,2329,2330],{"class":102}," groupText",[88,2332,518],{"class":94},[88,2334,2002],{"class":603},[88,2336,524],{"class":94},[88,2338,2339],{"class":527},"extractTextContent",[88,2341,530],{"class":94},[88,2343,2268],{"class":102},[88,2345,541],{"class":94},[88,2347,2349,2351,2353,2356,2359,2362,2365,2367,2370,2372,2374,2377],{"class":90,"line":2348},50,[88,2350,2303],{"class":98},[88,2352,1283],{"class":94},[88,2354,2355],{"class":102},"groupText",[88,2357,2358],{"class":511}," &&",[88,2360,2361],{"class":511}," !",[88,2363,2364],{"class":102},"allItemsMap",[88,2366,524],{"class":94},[88,2368,2369],{"class":527},"has",[88,2371,530],{"class":94},[88,2373,2310],{"class":102},[88,2375,2376],{"class":94},"))",[88,2378,993],{"class":94},[88,2380,2382,2385,2387,2390,2392,2394,2396],{"class":90,"line":2381},51,[88,2383,2384],{"class":102},"          allItemsMap",[88,2386,524],{"class":94},[88,2388,2389],{"class":527},"set",[88,2391,530],{"class":94},[88,2393,2310],{"class":102},[88,2395,1115],{"class":94},[88,2397,993],{"class":94},[88,2399,2401,2404,2406,2408,2410,2412],{"class":90,"line":2400},52,[88,2402,2403],{"class":762},"            top",[88,2405,494],{"class":94},[88,2407,1137],{"class":527},[88,2409,530],{"class":94},[88,2411,2310],{"class":102},[88,2413,2414],{"class":94},"),\n",[88,2416,2418,2421,2423,2425,2428,2430],{"class":90,"line":2417},53,[88,2419,2420],{"class":762},"            type",[88,2422,494],{"class":94},[88,2424,1894],{"class":109},[88,2426,2427],{"class":113},"group",[88,2429,533],{"class":109},[88,2431,774],{"class":94},[88,2433,2435,2438,2440,2442,2444],{"class":90,"line":2434},54,[88,2436,2437],{"class":762},"            data",[88,2439,494],{"class":94},[88,2441,910],{"class":94},[88,2443,2355],{"class":102},[88,2445,967],{"class":94},[88,2447,2449],{"class":90,"line":2448},55,[88,2450,2451],{"class":94},"          });\n",[88,2453,2455],{"class":90,"line":2454},56,[88,2456,2457],{"class":94},"        }\n",[88,2459,2461],{"class":90,"line":2460},57,[88,2462,2463],{"class":94},"      });\n",[88,2465,2467],{"class":90,"line":2466},58,[88,2468,468],{"emptyLinePlaceholder":467},[88,2470,2472],{"class":90,"line":2471},59,[88,2473,2474],{"class":296},"      // 現在表示されているデータ行を収集\n",[88,2476,2478,2480,2483,2485,2487,2489,2491,2493,2495,2498,2500],{"class":90,"line":2477},60,[88,2479,1305],{"class":511},[88,2481,2482],{"class":102}," rows",[88,2484,518],{"class":94},[88,2486,1765],{"class":102},[88,2488,524],{"class":94},[88,2490,276],{"class":527},[88,2492,530],{"class":94},[88,2494,533],{"class":109},[88,2496,2497],{"class":113},".table-styles__table__row___K6TSS",[88,2499,533],{"class":109},[88,2501,541],{"class":94},[88,2503,2505,2508,2510,2512,2514,2516,2518],{"class":90,"line":2504},61,[88,2506,2507],{"class":102},"      rows",[88,2509,524],{"class":94},[88,2511,2263],{"class":527},[88,2513,530],{"class":94},[88,2515,1681],{"class":102},[88,2517,619],{"class":94},[88,2519,993],{"class":94},[88,2521,2523],{"class":90,"line":2522},62,[88,2524,2525],{"class":296},"        // ヘッダー行は除外\n",[88,2527,2529,2531,2533,2535,2537,2540,2542,2544,2547,2549,2551,2553],{"class":90,"line":2528},63,[88,2530,2303],{"class":98},[88,2532,1283],{"class":94},[88,2534,1681],{"class":102},[88,2536,524],{"class":94},[88,2538,2539],{"class":527},"closest",[88,2541,530],{"class":94},[88,2543,533],{"class":109},[88,2545,2546],{"class":113},".table-styles__table__head___Uu9qm",[88,2548,533],{"class":109},[88,2550,2376],{"class":94},[88,2552,2315],{"class":98},[88,2554,1162],{"class":94},[88,2556,2558],{"class":90,"line":2557},64,[88,2559,468],{"emptyLinePlaceholder":467},[88,2561,2563],{"class":90,"line":2562},65,[88,2564,2565],{"class":296},"        // 行の位置をキーとして使用（top位置で識別）\n",[88,2567,2569,2571,2573,2575,2577,2579,2581,2583,2585],{"class":90,"line":2568},66,[88,2570,2278],{"class":511},[88,2572,2281],{"class":102},[88,2574,518],{"class":94},[88,2576,1633],{"class":102},[88,2578,524],{"class":94},[88,2580,1146],{"class":102},[88,2582,524],{"class":94},[88,2584,2295],{"class":102},[88,2586,1162],{"class":94},[88,2588,2590,2592,2594,2596,2598,2600,2602],{"class":90,"line":2589},67,[88,2591,2303],{"class":98},[88,2593,1283],{"class":94},[88,2595,1800],{"class":511},[88,2597,2310],{"class":102},[88,2599,1057],{"class":94},[88,2601,2315],{"class":98},[88,2603,1162],{"class":94},[88,2605,2607],{"class":90,"line":2606},68,[88,2608,468],{"emptyLinePlaceholder":467},[88,2610,2612],{"class":90,"line":2611},69,[88,2613,2614],{"class":296},"        // まだ収集していない行のみ追加\n",[88,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2636],{"class":90,"line":2617},70,[88,2619,2303],{"class":98},[88,2621,1283],{"class":94},[88,2623,1800],{"class":511},[88,2625,2364],{"class":102},[88,2627,524],{"class":94},[88,2629,2369],{"class":527},[88,2631,530],{"class":94},[88,2633,2310],{"class":102},[88,2635,2376],{"class":94},[88,2637,993],{"class":94},[88,2639,2641,2644,2647,2649,2651,2653,2656,2658,2660],{"class":90,"line":2640},71,[88,2642,2643],{"class":511},"          const",[88,2645,2646],{"class":102}," rowData",[88,2648,518],{"class":94},[88,2650,2002],{"class":603},[88,2652,524],{"class":94},[88,2654,2655],{"class":527},"extractRowData",[88,2657,530],{"class":94},[88,2659,1681],{"class":102},[88,2661,541],{"class":94},[88,2663,2665,2668,2670,2673,2675,2677,2679,2681,2683,2685,2687,2690,2693,2696],{"class":90,"line":2664},72,[88,2666,2667],{"class":98},"          if",[88,2669,1283],{"class":94},[88,2671,2672],{"class":102},"rowData",[88,2674,524],{"class":94},[88,2676,1291],{"class":762},[88,2678,1294],{"class":94},[88,2680,1159],{"class":770},[88,2682,2358],{"class":511},[88,2684,2646],{"class":102},[88,2686,1652],{"class":94},[88,2688,2689],{"class":770},"0",[88,2691,2692],{"class":94},"])",[88,2694,2695],{"class":94}," {",[88,2697,2698],{"class":296}," // 空行を除外\n",[88,2700,2702,2705,2707,2709,2711,2713,2715],{"class":90,"line":2701},73,[88,2703,2704],{"class":102},"            allItemsMap",[88,2706,524],{"class":94},[88,2708,2389],{"class":527},[88,2710,530],{"class":94},[88,2712,2310],{"class":102},[88,2714,1115],{"class":94},[88,2716,993],{"class":94},[88,2718,2720,2723,2725,2727,2729,2731],{"class":90,"line":2719},74,[88,2721,2722],{"class":762},"              top",[88,2724,494],{"class":94},[88,2726,1137],{"class":527},[88,2728,530],{"class":94},[88,2730,2310],{"class":102},[88,2732,2414],{"class":94},[88,2734,2736,2739,2741,2743,2745,2747],{"class":90,"line":2735},75,[88,2737,2738],{"class":762},"              type",[88,2740,494],{"class":94},[88,2742,1894],{"class":109},[88,2744,1681],{"class":113},[88,2746,533],{"class":109},[88,2748,774],{"class":94},[88,2750,2752,2755,2757],{"class":90,"line":2751},76,[88,2753,2754],{"class":762},"              data",[88,2756,494],{"class":94},[88,2758,2759],{"class":102}," rowData\n",[88,2761,2763],{"class":90,"line":2762},77,[88,2764,2765],{"class":94},"            });\n",[88,2767,2769],{"class":90,"line":2768},78,[88,2770,2771],{"class":94},"          }\n",[88,2773,2775],{"class":90,"line":2774},79,[88,2776,2457],{"class":94},[88,2778,2780],{"class":90,"line":2779},80,[88,2781,2463],{"class":94},[88,2783,2785],{"class":90,"line":2784},81,[88,2786,468],{"emptyLinePlaceholder":467},[88,2788,2790],{"class":90,"line":2789},82,[88,2791,2792],{"class":296},"      // 進捗を表示\n",[88,2794,2796,2798,2801,2803,2805,2807,2810,2812,2815,2817,2819,2821,2824,2826,2828,2830,2832,2834,2837,2839],{"class":90,"line":2795},83,[88,2797,1305],{"class":511},[88,2799,2800],{"class":102}," progress",[88,2802,518],{"class":94},[88,2804,1531],{"class":102},[88,2806,524],{"class":94},[88,2808,2809],{"class":527},"min",[88,2811,530],{"class":94},[88,2813,2814],{"class":770},"100",[88,2816,1115],{"class":94},[88,2818,1531],{"class":102},[88,2820,524],{"class":94},[88,2822,2823],{"class":527},"round",[88,2825,1110],{"class":94},[88,2827,2146],{"class":102},[88,2829,2124],{"class":511},[88,2831,2077],{"class":102},[88,2833,1057],{"class":94},[88,2835,2836],{"class":511}," *",[88,2838,2212],{"class":770},[88,2840,1562],{"class":94},[88,2842,2844,2847,2849,2851,2853,2856,2859,2862,2865,2868,2871,2874],{"class":90,"line":2843},84,[88,2845,2846],{"class":102},"      button",[88,2848,524],{"class":94},[88,2850,572],{"class":102},[88,2852,518],{"class":94},[88,2854,2855],{"class":109}," `",[88,2857,2858],{"class":113},"読み込み中... ",[88,2860,2861],{"class":98},"${",[88,2863,2864],{"class":113},"progress",[88,2866,2867],{"class":98},"}",[88,2869,2870],{"class":113},"%",[88,2872,2873],{"class":109},"`",[88,2875,1162],{"class":94},[88,2877,2879],{"class":90,"line":2878},85,[88,2880,468],{"emptyLinePlaceholder":467},[88,2882,2884,2887,2890,2892],{"class":90,"line":2883},86,[88,2885,2886],{"class":102},"      currentScroll",[88,2888,2889],{"class":511}," +=",[88,2891,2117],{"class":102},[88,2893,1162],{"class":94},[88,2895,2897],{"class":90,"line":2896},87,[88,2898,973],{"class":94},[88,2900,2902],{"class":90,"line":2901},88,[88,2903,468],{"emptyLinePlaceholder":467},[88,2905,2907],{"class":90,"line":2906},89,[88,2908,2909],{"class":296},"    // 元のスクロール位置に戻す\n",[88,2911,2913,2916,2918,2920,2922,2924],{"class":90,"line":2912},90,[88,2914,2915],{"class":102},"    scrollContainer",[88,2917,524],{"class":94},[88,2919,2041],{"class":102},[88,2921,518],{"class":94},[88,2923,2032],{"class":102},[88,2925,1162],{"class":94},[88,2927,2929],{"class":90,"line":2928},91,[88,2930,468],{"emptyLinePlaceholder":467},[88,2932,2934],{"class":90,"line":2933},92,[88,2935,2936],{"class":296},"    // 収集したデータをtop位置でソートして配列に変換\n",[88,2938,2940,2942,2945,2947,2949,2951,2953,2955,2957,2959,2962],{"class":90,"line":2939},93,[88,2941,1129],{"class":511},[88,2943,2944],{"class":102}," sortedItems",[88,2946,518],{"class":94},[88,2948,1072],{"class":102},[88,2950,524],{"class":94},[88,2952,1077],{"class":527},[88,2954,530],{"class":94},[88,2956,2364],{"class":102},[88,2958,524],{"class":94},[88,2960,2961],{"class":527},"values",[88,2963,2964],{"class":94},"())\n",[88,2966,2968,2971,2973,2975,2977,2979,2981,2983,2985,2988,2990,2992,2994,2996,2998,3000],{"class":90,"line":2967},94,[88,2969,2970],{"class":94},"      .",[88,2972,1107],{"class":527},[88,2974,1110],{"class":94},[88,2976,26],{"class":102},[88,2978,1115],{"class":94},[88,2980,1118],{"class":102},[88,2982,1057],{"class":94},[88,2984,619],{"class":94},[88,2986,2987],{"class":102}," a",[88,2989,524],{"class":94},[88,2991,2295],{"class":102},[88,2993,1204],{"class":511},[88,2995,1118],{"class":102},[88,2997,524],{"class":94},[88,2999,2295],{"class":102},[88,3001,541],{"class":94},[88,3003,3005],{"class":90,"line":3004},95,[88,3006,468],{"emptyLinePlaceholder":467},[88,3008,3010],{"class":90,"line":3009},96,[88,3011,3012],{"class":296},"    // 最終的なデータ配列を構築\n",[88,3014,3016,3018,3021,3023],{"class":90,"line":3015},97,[88,3017,1129],{"class":511},[88,3019,3020],{"class":102}," finalData",[88,3022,518],{"class":94},[88,3024,1586],{"class":94},[88,3026,3028],{"class":90,"line":3027},98,[88,3029,468],{"emptyLinePlaceholder":467},[88,3031,3033],{"class":90,"line":3032},99,[88,3034,3035],{"class":296},"    // ヘッダーを追加（複数行）\n",[88,3037,3039,3041,3043,3046,3048,3050,3052,3054,3056,3058,3060],{"class":90,"line":3038},100,[88,3040,1280],{"class":98},[88,3042,1283],{"class":94},[88,3044,3045],{"class":102},"headerRows",[88,3047,2358],{"class":511},[88,3049,1581],{"class":102},[88,3051,524],{"class":94},[88,3053,1291],{"class":762},[88,3055,1294],{"class":94},[88,3057,1159],{"class":770},[88,3059,1057],{"class":94},[88,3061,993],{"class":94},[88,3063,3065,3067,3069,3071,3073,3075,3077],{"class":90,"line":3064},101,[88,3066,1997],{"class":102},[88,3068,524],{"class":94},[88,3070,2263],{"class":527},[88,3072,530],{"class":94},[88,3074,1681],{"class":102},[88,3076,619],{"class":94},[88,3078,993],{"class":94},[88,3080,3082,3085,3087,3089,3091,3093],{"class":90,"line":3081},102,[88,3083,3084],{"class":102},"        finalData",[88,3086,524],{"class":94},[88,3088,1676],{"class":527},[88,3090,530],{"class":94},[88,3092,1681],{"class":102},[88,3094,541],{"class":94},[88,3096,3098],{"class":90,"line":3097},103,[88,3099,2463],{"class":94},[88,3101,3103],{"class":90,"line":3102},104,[88,3104,973],{"class":94},[88,3106,3108],{"class":90,"line":3107},105,[88,3109,468],{"emptyLinePlaceholder":467},[88,3111,3113],{"class":90,"line":3112},106,[88,3114,3115],{"class":296},"    // グループヘッダーとデータ行を位置順に追加\n",[88,3117,3119,3122,3124,3126,3128,3131,3133],{"class":90,"line":3118},107,[88,3120,3121],{"class":102},"    sortedItems",[88,3123,524],{"class":94},[88,3125,2263],{"class":527},[88,3127,530],{"class":94},[88,3129,3130],{"class":102},"item",[88,3132,619],{"class":94},[88,3134,993],{"class":94},[88,3136,3138,3141,3143,3145,3147,3149,3151,3154],{"class":90,"line":3137},108,[88,3139,3140],{"class":102},"      finalData",[88,3142,524],{"class":94},[88,3144,1676],{"class":527},[88,3146,530],{"class":94},[88,3148,3130],{"class":102},[88,3150,524],{"class":94},[88,3152,3153],{"class":102},"data",[88,3155,541],{"class":94},[88,3157,3159],{"class":90,"line":3158},109,[88,3160,3161],{"class":94},"    });\n",[88,3163,3165],{"class":90,"line":3164},110,[88,3166,468],{"emptyLinePlaceholder":467},[88,3168,3170],{"class":90,"line":3169},111,[88,3171,3172],{"class":296},"    // TSV形式に変換\n",[88,3174,3176,3178,3181,3183,3185,3187,3189,3191,3193,3195,3197,3199,3202,3204,3206,3209,3211,3214,3216,3218,3220,3222,3224],{"class":90,"line":3175},112,[88,3177,1129],{"class":511},[88,3179,3180],{"class":102}," tsv",[88,3182,518],{"class":94},[88,3184,3020],{"class":102},[88,3186,524],{"class":94},[88,3188,612],{"class":527},[88,3190,530],{"class":94},[88,3192,1681],{"class":102},[88,3194,619],{"class":94},[88,3196,1633],{"class":102},[88,3198,524],{"class":94},[88,3200,3201],{"class":527},"join",[88,3203,530],{"class":94},[88,3205,533],{"class":109},[88,3207,3208],{"class":603},"\\t",[88,3210,533],{"class":109},[88,3212,3213],{"class":94},")).",[88,3215,3201],{"class":527},[88,3217,530],{"class":94},[88,3219,533],{"class":109},[88,3221,604],{"class":603},[88,3223,533],{"class":109},[88,3225,541],{"class":94},[88,3227,3229],{"class":90,"line":3228},113,[88,3230,468],{"emptyLinePlaceholder":467},[88,3232,3234],{"class":90,"line":3233},114,[88,3235,3236],{"class":296},"    // クリップボードにコピー\n",[88,3238,3240,3243,3246,3248,3251,3253,3256,3258,3261],{"class":90,"line":3239},115,[88,3241,3242],{"class":98},"    await",[88,3244,3245],{"class":102}," navigator",[88,3247,524],{"class":94},[88,3249,3250],{"class":102},"clipboard",[88,3252,524],{"class":94},[88,3254,3255],{"class":527},"writeText",[88,3257,530],{"class":94},[88,3259,3260],{"class":102},"tsv",[88,3262,541],{"class":94},[88,3264,3266],{"class":90,"line":3265},116,[88,3267,468],{"emptyLinePlaceholder":467},[88,3269,3271,3273,3276,3278,3280,3282,3284,3286,3288,3290,3293,3295,3298,3301,3303,3305,3307,3309,3311],{"class":90,"line":3270},117,[88,3272,1129],{"class":511},[88,3274,3275],{"class":102}," dataRowCount",[88,3277,518],{"class":94},[88,3279,2944],{"class":102},[88,3281,524],{"class":94},[88,3283,632],{"class":527},[88,3285,530],{"class":94},[88,3287,3130],{"class":102},[88,3289,619],{"class":94},[88,3291,3292],{"class":102}," item",[88,3294,524],{"class":94},[88,3296,3297],{"class":102},"type",[88,3299,3300],{"class":511}," ===",[88,3302,1894],{"class":109},[88,3304,1681],{"class":113},[88,3306,533],{"class":109},[88,3308,609],{"class":94},[88,3310,1291],{"class":762},[88,3312,1162],{"class":94},[88,3314,3316,3319,3321,3323,3325,3327],{"class":90,"line":3315},118,[88,3317,3318],{"class":102},"    button",[88,3320,524],{"class":94},[88,3322,572],{"class":102},[88,3324,518],{"class":94},[88,3326,1854],{"class":102},[88,3328,1162],{"class":94},[88,3330,3332,3334,3336,3338,3340,3343],{"class":90,"line":3331},119,[88,3333,3318],{"class":102},[88,3335,524],{"class":94},[88,3337,1874],{"class":102},[88,3339,518],{"class":94},[88,3341,3342],{"class":98}," false",[88,3344,1162],{"class":94},[88,3346,3348,3350,3352,3355,3357,3359,3362,3364,3367,3369,3372,3374],{"class":90,"line":3347},120,[88,3349,1817],{"class":603},[88,3351,524],{"class":94},[88,3353,3354],{"class":527},"showNotification",[88,3356,530],{"class":94},[88,3358,2873],{"class":109},[88,3360,3361],{"class":113},"テーブルデータをコピーしました！（",[88,3363,2861],{"class":98},[88,3365,3366],{"class":113},"dataRowCount",[88,3368,2867],{"class":98},[88,3370,3371],{"class":113},"行）",[88,3373,2873],{"class":109},[88,3375,541],{"class":94},[88,3377,3379],{"class":90,"line":3378},121,[88,3380,468],{"emptyLinePlaceholder":467},[88,3382,3384,3387,3390,3392,3395,3397],{"class":90,"line":3383},122,[88,3385,3386],{"class":94},"  }",[88,3388,3389],{"class":98}," catch",[88,3391,1283],{"class":94},[88,3393,3394],{"class":102},"error",[88,3396,1057],{"class":94},[88,3398,993],{"class":94},[88,3400,3402,3405,3407,3409,3411,3413,3416,3418,3420,3423],{"class":90,"line":3401},123,[88,3403,3404],{"class":102},"    console",[88,3406,524],{"class":94},[88,3408,3394],{"class":527},[88,3410,530],{"class":94},[88,3412,533],{"class":109},[88,3414,3415],{"class":113},"テーブルデータの抽出に失敗しました:",[88,3417,533],{"class":109},[88,3419,1115],{"class":94},[88,3421,3422],{"class":102}," error",[88,3424,541],{"class":94},[88,3426,3428,3430,3432,3434,3436,3438],{"class":90,"line":3427},124,[88,3429,3318],{"class":102},[88,3431,524],{"class":94},[88,3433,572],{"class":102},[88,3435,518],{"class":94},[88,3437,1854],{"class":102},[88,3439,1162],{"class":94},[88,3441,3443,3445,3447,3449,3451,3453],{"class":90,"line":3442},125,[88,3444,3318],{"class":102},[88,3446,524],{"class":94},[88,3448,1874],{"class":102},[88,3450,518],{"class":94},[88,3452,3342],{"class":98},[88,3454,1162],{"class":94},[88,3456,3458,3460,3462,3464,3466,3468,3471,3473,3475,3477],{"class":90,"line":3457},126,[88,3459,1817],{"class":603},[88,3461,524],{"class":94},[88,3463,3354],{"class":527},[88,3465,530],{"class":94},[88,3467,533],{"class":109},[88,3469,3470],{"class":113},"エラーが発生しました",[88,3472,533],{"class":109},[88,3474,1115],{"class":94},[88,3476,1879],{"class":98},[88,3478,541],{"class":94},[88,3480,3482],{"class":90,"line":3481},127,[88,3483,1018],{"class":94},[88,3485,3487],{"class":90,"line":3486},128,[88,3488,1024],{"class":94},[18,3490,3491,494],{},[21,3492,3493],{},"重要なポイント",[3495,3496,3497,3505,3511,3520,3526],"ol",{},[269,3498,3499,24,3502,3504],{},[21,3500,3501],{},"Mapで重複排除",[71,3503,2310],{},"をキーとして使用",[269,3506,3507,3510],{},[21,3508,3509],{},"await new Promise(resolve => setTimeout(resolve, 100))",": DOMの更新を待つために必須",[269,3512,3513,24,3516,3519],{},[21,3514,3515],{},"半画面ずつスクロール",[71,3517,3518],{},"containerHeight / 2","で細かくスクロール",[269,3521,3522,3525],{},[21,3523,3524],{},"元の位置に復元",": ユーザー体験のため",[269,3527,3528,3531],{},[21,3529,3530],{},"top位置でソート",": 正しい順序を保証",[1036,3533,3535],{"id":3534},"_3-データ行の抽出","3. データ行の抽出",[79,3537,3539],{"className":497,"code":3538,"language":499,"meta":84,"style":84},"extractRowData(row) {\n  const cells = [];\n\n  // セルを左から右の順序で取得するため、position情報でソート\n  const cellElements = Array.from(row.children);\n\n  // セルを位置順にソート（重要！）\n  cellElements.sort((a, b) => {\n    const leftA = parseInt(a.style.left) || 0;\n    const leftB = parseInt(b.style.left) || 0;\n    return leftA - leftB;\n  });\n\n  cellElements.forEach(cell => {\n    const text = this.extractTextContent(cell);\n    cells.push(text);\n  });\n\n  return cells;\n}\n",[71,3540,3541,3553,3564,3568,3573,3597,3601,3605,3627,3657,3687,3699,3703,3707,3723,3743,3758,3762,3766,3774],{"__ignoreMap":84},[88,3542,3543,3545,3547,3549,3551],{"class":90,"line":91},[88,3544,2655],{"class":527},[88,3546,530],{"class":94},[88,3548,1681],{"class":102},[88,3550,1057],{"class":94},[88,3552,993],{"class":94},[88,3554,3555,3557,3560,3562],{"class":90,"line":122},[88,3556,1064],{"class":511},[88,3558,3559],{"class":102}," cells",[88,3561,518],{"class":94},[88,3563,1586],{"class":94},[88,3565,3566],{"class":90,"line":143},[88,3567,468],{"emptyLinePlaceholder":467},[88,3569,3570],{"class":90,"line":164},[88,3571,3572],{"class":296},"  // セルを左から右の順序で取得するため、position情報でソート\n",[88,3574,3575,3577,3579,3581,3583,3585,3587,3589,3591,3593,3595],{"class":90,"line":185},[88,3576,1064],{"class":511},[88,3578,1067],{"class":102},[88,3580,518],{"class":94},[88,3582,1072],{"class":102},[88,3584,524],{"class":94},[88,3586,1077],{"class":527},[88,3588,530],{"class":94},[88,3590,1681],{"class":102},[88,3592,524],{"class":94},[88,3594,1086],{"class":102},[88,3596,541],{"class":94},[88,3598,3599],{"class":90,"line":218},[88,3600,468],{"emptyLinePlaceholder":467},[88,3602,3603],{"class":90,"line":228},[88,3604,1097],{"class":296},[88,3606,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625],{"class":90,"line":238},[88,3608,1102],{"class":102},[88,3610,524],{"class":94},[88,3612,1107],{"class":527},[88,3614,1110],{"class":94},[88,3616,26],{"class":102},[88,3618,1115],{"class":94},[88,3620,1118],{"class":102},[88,3622,1057],{"class":94},[88,3624,619],{"class":94},[88,3626,993],{"class":94},[88,3628,3629,3631,3633,3635,3637,3639,3641,3643,3645,3647,3649,3651,3653,3655],{"class":90,"line":248},[88,3630,1129],{"class":511},[88,3632,1132],{"class":102},[88,3634,518],{"class":94},[88,3636,1137],{"class":527},[88,3638,530],{"class":94},[88,3640,26],{"class":102},[88,3642,524],{"class":94},[88,3644,1146],{"class":102},[88,3646,524],{"class":94},[88,3648,1151],{"class":102},[88,3650,1057],{"class":94},[88,3652,1156],{"class":511},[88,3654,1159],{"class":770},[88,3656,1162],{"class":94},[88,3658,3659,3661,3663,3665,3667,3669,3671,3673,3675,3677,3679,3681,3683,3685],{"class":90,"line":409},[88,3660,1129],{"class":511},[88,3662,1169],{"class":102},[88,3664,518],{"class":94},[88,3666,1137],{"class":527},[88,3668,530],{"class":94},[88,3670,1178],{"class":102},[88,3672,524],{"class":94},[88,3674,1146],{"class":102},[88,3676,524],{"class":94},[88,3678,1151],{"class":102},[88,3680,1057],{"class":94},[88,3682,1156],{"class":511},[88,3684,1159],{"class":770},[88,3686,1162],{"class":94},[88,3688,3689,3691,3693,3695,3697],{"class":90,"line":891},[88,3690,1199],{"class":98},[88,3692,1132],{"class":102},[88,3694,1204],{"class":511},[88,3696,1169],{"class":102},[88,3698,1162],{"class":94},[88,3700,3701],{"class":90,"line":897},[88,3702,1213],{"class":94},[88,3704,3705],{"class":90,"line":923},[88,3706,468],{"emptyLinePlaceholder":467},[88,3708,3709,3711,3713,3715,3717,3719,3721],{"class":90,"line":946},[88,3710,1102],{"class":102},[88,3712,524],{"class":94},[88,3714,2263],{"class":527},[88,3716,530],{"class":94},[88,3718,1242],{"class":102},[88,3720,619],{"class":94},[88,3722,993],{"class":94},[88,3724,3725,3727,3729,3731,3733,3735,3737,3739,3741],{"class":90,"line":970},[88,3726,1129],{"class":511},[88,3728,563],{"class":102},[88,3730,518],{"class":94},[88,3732,2002],{"class":603},[88,3734,524],{"class":94},[88,3736,2339],{"class":527},[88,3738,530],{"class":94},[88,3740,1242],{"class":102},[88,3742,541],{"class":94},[88,3744,3745,3748,3750,3752,3754,3756],{"class":90,"line":976},[88,3746,3747],{"class":102},"    cells",[88,3749,524],{"class":94},[88,3751,1676],{"class":527},[88,3753,530],{"class":94},[88,3755,735],{"class":102},[88,3757,541],{"class":94},[88,3759,3760],{"class":90,"line":981},[88,3761,1213],{"class":94},[88,3763,3764],{"class":90,"line":996},[88,3765,468],{"emptyLinePlaceholder":467},[88,3767,3768,3770,3772],{"class":90,"line":1015},[88,3769,1699],{"class":98},[88,3771,3559],{"class":102},[88,3773,1162],{"class":94},[88,3775,3776],{"class":90,"line":1021},[88,3777,1024],{"class":94},[1036,3779,3781],{"id":3780},"_4-テキスト抽出","4. テキスト抽出",[79,3783,3785],{"className":497,"code":3784,"language":499,"meta":84,"style":84},"extractTextContent(element) {\n  // label要素からテキストを抽出\n  const labels = element.querySelectorAll('label');\n  const texts = Array.from(labels).map(label => label.textContent.trim()).filter(t => t);\n\n  // 改行でテキストを結合（ヘッダーセルの場合、複数行ある）\n  return texts.join('\\n');\n}\n",[71,3786,3787,3800,3805,3830,3882,3886,3891,3911],{"__ignoreMap":84},[88,3788,3789,3791,3793,3796,3798],{"class":90,"line":91},[88,3790,2339],{"class":527},[88,3792,530],{"class":94},[88,3794,3795],{"class":102},"element",[88,3797,1057],{"class":94},[88,3799,993],{"class":94},[88,3801,3802],{"class":90,"line":122},[88,3803,3804],{"class":296},"  // label要素からテキストを抽出\n",[88,3806,3807,3809,3811,3813,3816,3818,3820,3822,3824,3826,3828],{"class":90,"line":143},[88,3808,1064],{"class":511},[88,3810,515],{"class":102},[88,3812,518],{"class":94},[88,3814,3815],{"class":102}," element",[88,3817,524],{"class":94},[88,3819,276],{"class":527},[88,3821,530],{"class":94},[88,3823,533],{"class":109},[88,3825,536],{"class":113},[88,3827,533],{"class":109},[88,3829,541],{"class":94},[88,3831,3832,3834,3836,3838,3840,3842,3844,3846,3848,3850,3852,3854,3856,3858,3860,3862,3864,3866,3868,3870,3872,3874,3876,3878,3880],{"class":90,"line":164},[88,3833,1064],{"class":511},[88,3835,1308],{"class":102},[88,3837,518],{"class":94},[88,3839,1072],{"class":102},[88,3841,524],{"class":94},[88,3843,1077],{"class":527},[88,3845,530],{"class":94},[88,3847,1286],{"class":102},[88,3849,609],{"class":94},[88,3851,612],{"class":527},[88,3853,530],{"class":94},[88,3855,536],{"class":102},[88,3857,619],{"class":94},[88,3859,1333],{"class":102},[88,3861,524],{"class":94},[88,3863,572],{"class":102},[88,3865,524],{"class":94},[88,3867,577],{"class":527},[88,3869,629],{"class":94},[88,3871,632],{"class":527},[88,3873,530],{"class":94},[88,3875,1350],{"class":102},[88,3877,619],{"class":94},[88,3879,1355],{"class":102},[88,3881,541],{"class":94},[88,3883,3884],{"class":90,"line":185},[88,3885,468],{"emptyLinePlaceholder":467},[88,3887,3888],{"class":90,"line":218},[88,3889,3890],{"class":296},"  // 改行でテキストを結合（ヘッダーセルの場合、複数行ある）\n",[88,3892,3893,3895,3897,3899,3901,3903,3905,3907,3909],{"class":90,"line":228},[88,3894,1699],{"class":98},[88,3896,1308],{"class":102},[88,3898,524],{"class":94},[88,3900,3201],{"class":527},[88,3902,530],{"class":94},[88,3904,533],{"class":109},[88,3906,604],{"class":603},[88,3908,533],{"class":109},[88,3910,541],{"class":94},[88,3912,3913],{"class":90,"line":238},[88,3914,1024],{"class":94},[18,3916,3917,3919],{},[21,3918,1029],{},": データセルにはlabel要素が含まれているが、ヘッダーセルにはlabel要素が含まれていない場合がある。",[14,3921,3922],{"id":3922},"トラブルシューティング",[60,3924,3926],{"id":3925},"問題1-ヘッダーが正しく抽出されない","問題1: ヘッダーが正しく抽出されない",[18,3928,3929,3932],{},[21,3930,3931],{},"症状",": ヘッダーが1行にまとまってしまう、または空になる",[18,3934,3935,3938],{},[21,3936,3937],{},"原因",": label要素の有無を確認していない",[18,3940,3941,494],{},[21,3942,3943],{},"解決策",[79,3945,3947],{"className":497,"code":3946,"language":499,"meta":84,"style":84},"// label要素の確認を必ず行う\nconst labels = cell.querySelectorAll('label');\nif (labels.length > 0) {\n  // label要素がある場合\n} else {\n  // label要素がない場合はtextContentを使用\n  const text = cell.textContent.trim();\n  const lines = text.split('\\n').map(line => line.trim()).filter(line => line);\n}\n",[71,3948,3949,3954,3978,3999,4004,4013,4018,4038,4090],{"__ignoreMap":84},[88,3950,3951],{"class":90,"line":91},[88,3952,3953],{"class":296},"// label要素の確認を必ず行う\n",[88,3955,3956,3958,3960,3962,3964,3966,3968,3970,3972,3974,3976],{"class":90,"line":122},[88,3957,512],{"class":511},[88,3959,515],{"class":102},[88,3961,518],{"class":94},[88,3963,521],{"class":102},[88,3965,524],{"class":94},[88,3967,276],{"class":527},[88,3969,530],{"class":94},[88,3971,533],{"class":109},[88,3973,536],{"class":113},[88,3975,533],{"class":109},[88,3977,541],{"class":94},[88,3979,3980,3983,3985,3987,3989,3991,3993,3995,3997],{"class":90,"line":143},[88,3981,3982],{"class":98},"if",[88,3984,1283],{"class":94},[88,3986,1286],{"class":102},[88,3988,524],{"class":94},[88,3990,1291],{"class":762},[88,3992,1294],{"class":94},[88,3994,1159],{"class":770},[88,3996,1057],{"class":94},[88,3998,993],{"class":94},[88,4000,4001],{"class":90,"line":164},[88,4002,4003],{"class":296},"  // label要素がある場合\n",[88,4005,4006,4008,4011],{"class":90,"line":185},[88,4007,2867],{"class":94},[88,4009,4010],{"class":98}," else",[88,4012,993],{"class":94},[88,4014,4015],{"class":90,"line":218},[88,4016,4017],{"class":296},"  // label要素がない場合はtextContentを使用\n",[88,4019,4020,4022,4024,4026,4028,4030,4032,4034,4036],{"class":90,"line":228},[88,4021,1064],{"class":511},[88,4023,563],{"class":102},[88,4025,518],{"class":94},[88,4027,521],{"class":102},[88,4029,524],{"class":94},[88,4031,572],{"class":102},[88,4033,524],{"class":94},[88,4035,577],{"class":527},[88,4037,580],{"class":94},[88,4039,4040,4042,4044,4046,4048,4050,4052,4054,4056,4058,4060,4062,4064,4066,4068,4070,4072,4074,4076,4078,4080,4082,4084,4086,4088],{"class":90,"line":238},[88,4041,1064],{"class":511},[88,4043,587],{"class":102},[88,4045,518],{"class":94},[88,4047,563],{"class":102},[88,4049,524],{"class":94},[88,4051,596],{"class":527},[88,4053,530],{"class":94},[88,4055,533],{"class":109},[88,4057,604],{"class":603},[88,4059,533],{"class":109},[88,4061,609],{"class":94},[88,4063,612],{"class":527},[88,4065,530],{"class":94},[88,4067,90],{"class":102},[88,4069,619],{"class":94},[88,4071,622],{"class":102},[88,4073,524],{"class":94},[88,4075,577],{"class":527},[88,4077,629],{"class":94},[88,4079,632],{"class":527},[88,4081,530],{"class":94},[88,4083,90],{"class":102},[88,4085,619],{"class":94},[88,4087,622],{"class":102},[88,4089,541],{"class":94},[88,4091,4092],{"class":90,"line":248},[88,4093,1024],{"class":94},[60,4095,4097],{"id":4096},"問題2-画面に表示されている部分だけしかコピーできない","問題2: 画面に表示されている部分だけしかコピーできない",[18,4099,4100,4102],{},[21,4101,3931],{},": スクロールすると別のデータがコピーされる",[18,4104,4105,4107],{},[21,4106,3937],{},": 仮想スクロールに対応していない",[18,4109,4110,4112],{},[21,4111,3943],{},": 自動スクロール機能を実装（上記のcopyTableDataWithScroll関数）",[60,4114,4116],{"id":4115},"問題3-データの順序がバラバラ","問題3: データの順序がバラバラ",[18,4118,4119,4121],{},[21,4120,3931],{},": コピーしたデータの順序が正しくない",[18,4123,4124,4126],{},[21,4125,3937],{},": セルの位置でソートしていない",[18,4128,4129,494],{},[21,4130,3943],{},[79,4132,4134],{"className":497,"code":4133,"language":499,"meta":84,"style":84},"// 必ずleftとtopでソート\ncellElements.sort((a, b) => {\n  const leftA = parseInt(a.style.left) || 0;\n  const leftB = parseInt(b.style.left) || 0;\n  return leftA - leftB;\n});\n",[71,4135,4136,4141,4164,4194,4224,4236],{"__ignoreMap":84},[88,4137,4138],{"class":90,"line":91},[88,4139,4140],{"class":296},"// 必ずleftとtopでソート\n",[88,4142,4143,4146,4148,4150,4152,4154,4156,4158,4160,4162],{"class":90,"line":122},[88,4144,4145],{"class":102},"cellElements",[88,4147,524],{"class":94},[88,4149,1107],{"class":527},[88,4151,1110],{"class":94},[88,4153,26],{"class":102},[88,4155,1115],{"class":94},[88,4157,1118],{"class":102},[88,4159,1057],{"class":94},[88,4161,619],{"class":94},[88,4163,993],{"class":94},[88,4165,4166,4168,4170,4172,4174,4176,4178,4180,4182,4184,4186,4188,4190,4192],{"class":90,"line":143},[88,4167,1064],{"class":511},[88,4169,1132],{"class":102},[88,4171,518],{"class":94},[88,4173,1137],{"class":527},[88,4175,530],{"class":94},[88,4177,26],{"class":102},[88,4179,524],{"class":94},[88,4181,1146],{"class":102},[88,4183,524],{"class":94},[88,4185,1151],{"class":102},[88,4187,1057],{"class":94},[88,4189,1156],{"class":511},[88,4191,1159],{"class":770},[88,4193,1162],{"class":94},[88,4195,4196,4198,4200,4202,4204,4206,4208,4210,4212,4214,4216,4218,4220,4222],{"class":90,"line":164},[88,4197,1064],{"class":511},[88,4199,1169],{"class":102},[88,4201,518],{"class":94},[88,4203,1137],{"class":527},[88,4205,530],{"class":94},[88,4207,1178],{"class":102},[88,4209,524],{"class":94},[88,4211,1146],{"class":102},[88,4213,524],{"class":94},[88,4215,1151],{"class":102},[88,4217,1057],{"class":94},[88,4219,1156],{"class":511},[88,4221,1159],{"class":770},[88,4223,1162],{"class":94},[88,4225,4226,4228,4230,4232,4234],{"class":90,"line":185},[88,4227,1699],{"class":98},[88,4229,1132],{"class":102},[88,4231,1204],{"class":511},[88,4233,1169],{"class":102},[88,4235,1162],{"class":94},[88,4237,4238],{"class":90,"line":218},[88,4239,4240],{"class":94},"});\n",[60,4242,4244],{"id":4243},"問題4-domの更新が間に合わない","問題4: DOMの更新が間に合わない",[18,4246,4247,4249],{},[21,4248,3931],{},": スクロールしてもデータが取得できない",[18,4251,4252,4254],{},[21,4253,3937],{},": DOMの更新を待っていない",[18,4256,4257,494],{},[21,4258,3943],{},[79,4260,4262],{"className":497,"code":4261,"language":499,"meta":84,"style":84},"// スクロール後に必ず待機\nawait new Promise(resolve => setTimeout(resolve, 100));\n",[71,4263,4264,4269],{"__ignoreMap":84},[88,4265,4266],{"class":90,"line":91},[88,4267,4268],{"class":296},"// スクロール後に必ず待機\n",[88,4270,4271,4274,4276,4278,4280,4282,4284,4286,4288,4290,4292,4294],{"class":90,"line":122},[88,4272,4273],{"class":98},"await",[88,4275,1929],{"class":511},[88,4277,2193],{"class":762},[88,4279,530],{"class":94},[88,4281,2198],{"class":102},[88,4283,619],{"class":94},[88,4285,2203],{"class":527},[88,4287,530],{"class":94},[88,4289,2198],{"class":102},[88,4291,1115],{"class":94},[88,4293,2212],{"class":770},[88,4295,1562],{"class":94},[14,4297,4299],{"id":4298},"css-クラス名の対応表","CSS クラス名の対応表",[1749,4301,4302,4315],{},[4303,4304,4305],"thead",{},[4306,4307,4308,4312],"tr",{},[4309,4310,4311],"th",{},"要素",[4309,4313,4314],{},"CSSクラス名",[4316,4317,4318,4329,4338,4347,4357,4366,4376,4385],"tbody",{},[4306,4319,4320,4324],{},[4321,4322,4323],"td",{},"テーブルコンテナ",[4321,4325,4326],{},[71,4327,4328],{},".table-styles__table___fNvz7",[4306,4330,4331,4334],{},[4321,4332,4333],{},"スクロールコンテナ",[4321,4335,4336],{},[71,4337,1782],{},[4306,4339,4340,4343],{},[4321,4341,4342],{},"ヘッダー領域",[4321,4344,4345],{},[71,4346,2546],{},[4306,4348,4349,4352],{},[4321,4350,4351],{},"ヘッダーセル",[4321,4353,4354],{},[71,4355,4356],{},".table-styles__table__headerCell___gC361",[4306,4358,4359,4362],{},[4321,4360,4361],{},"データ行",[4321,4363,4364],{},[71,4365,2497],{},[4306,4367,4368,4371],{},[4321,4369,4370],{},"データセル",[4321,4372,4373],{},[71,4374,4375],{},".table-styles__table__dataCell___nRZp0",[4306,4377,4378,4381],{},[4321,4379,4380],{},"グループヘッダー",[4321,4382,4383],{},[71,4384,2248],{},[4306,4386,4387,4390],{},[4321,4388,4389],{},"固定列",[4321,4391,4392],{},[71,4393,4394],{},".table-styles__sticky___B0Ah9",[14,4396,4397],{"id":4397},"出力形式",[18,4399,4400],{},"TSV（タブ区切り）形式で出力：",[79,4402,4405],{"className":4403,"code":4404,"language":735},[733],"Fiscal Quarters 2Q FY2023A 3Q FY2023A 4Q FY2023A ...\nPeriod Ending Apr-30-2023 Jul-31-2023 Oct-31-2023 ...\nReport Date Jun-01-2023 Aug-31-2023 Dec-07-2023 ...\nIncome Statement\nSales 1000 1200 1500 ...\n...\n",[71,4406,4404],{"__ignoreMap":84},[14,4408,4410],{"id":4409},"他のai向けチェックリスト","他のAI向けチェックリスト",[18,4412,4413],{},"Chrome拡張機能を実装する際は、以下を必ず確認してください：",[266,4415,4418,4427,4433,4439,4445,4454,4465,4471,4477],{"className":4416},[4417],"contains-task-list",[269,4419,4422,4426],{"className":4420},[4421],"task-list-item",[4423,4424],"input",{"disabled":467,"type":4425},"checkbox"," ヘッダーセルがlabel要素を持っているか確認",[269,4428,4430,4432],{"className":4429},[4421],[4423,4431],{"disabled":467,"type":4425}," 持っていない場合は、textContentを改行で分割",[269,4434,4436,4438],{"className":4435},[4421],[4423,4437],{"disabled":467,"type":4425}," 仮想スクロールの有無を確認",[269,4440,4442,4444],{"className":4441},[4421],[4423,4443],{"disabled":467,"type":4425}," スクロールコンテナが存在する場合は自動スクロール機能を実装",[269,4446,4448,4450,4451,4453],{"className":4447},[4421],[4423,4449],{"disabled":467,"type":4425}," DOMの更新を待つために",[71,4452,3509],{},"を使用",[269,4455,4457,4459,4460,657,4462,4464],{"className":4456},[4421],[4423,4458],{"disabled":467,"type":4425}," セルを",[71,4461,656],{},[71,4463,660],{},"でソート",[269,4466,4468,4470],{"className":4467},[4421],[4423,4469],{"disabled":467,"type":4425}," Mapを使って重複を排除",[269,4472,4474,4476],{"className":4473},[4421],[4423,4475],{"disabled":467,"type":4425}," 元のスクロール位置に戻す",[269,4478,4480,4482,4483,4485,4486,4488],{"className":4479},[4421],[4423,4481],{"disabled":467,"type":4425}," TSV形式で出力（",[71,4484,3208],{},"でセルを区切り、",[71,4487,604],{},"で行を区切る）",[14,4490,4491],{"id":4491},"まとめ",[18,4493,4494],{},"この実装の核心は以下の3点：",[3495,4496,4497,4503,4509],{},[269,4498,4499,4502],{},[21,4500,4501],{},"ヘッダーの複数行対応",": label要素がない場合はtextContentを改行で分割",[269,4504,4505,4508],{},[21,4506,4507],{},"仮想スクロール対応",": 自動スクロールで全データを強制的にロード",[269,4510,4511,24,4514,657,4516,4518],{},[21,4512,4513],{},"位置ベースのソート",[71,4515,656],{},[71,4517,660],{},"で正しい順序を保証",[18,4520,4521],{},"これらを理解すれば、同様のテーブルに対して確実に動作する拡張機能を作成できます。",[1146,4523,4524],{},"html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .sG7-3, html code.shiki .sG7-3{--shiki-default:#393A34;--shiki-dark:#393A34}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .snbK4, html code.shiki .snbK4{--shiki-default:#A65E2B;--shiki-dark:#A65E2B}html pre.shiki code .sqvqQ, html code.shiki .sqvqQ{--shiki-default:#99841877;--shiki-dark:#99841877}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}html pre.shiki code .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}",{"title":84,"searchDepth":122,"depth":122,"links":4526},[4527,4528,4529,4535,4540,4546,4547,4548,4549],{"id":16,"depth":122,"text":16},{"id":51,"depth":122,"text":51},{"id":57,"depth":122,"text":58,"children":4530},[4531,4532,4533,4534],{"id":62,"depth":143,"text":63},{"id":257,"depth":143,"text":258},{"id":418,"depth":143,"text":419},{"id":645,"depth":143,"text":646},{"id":726,"depth":122,"text":726,"children":4536},[4537,4538,4539],{"id":729,"depth":143,"text":729},{"id":740,"depth":143,"text":741},{"id":1033,"depth":143,"text":1034},{"id":3922,"depth":122,"text":3922,"children":4541},[4542,4543,4544,4545],{"id":3925,"depth":143,"text":3926},{"id":4096,"depth":143,"text":4097},{"id":4115,"depth":143,"text":4116},{"id":4243,"depth":143,"text":4244},{"id":4298,"depth":122,"text":4299},{"id":4397,"depth":122,"text":4397},{"id":4409,"depth":122,"text":4410},{"id":4491,"depth":122,"text":4491},null,"div要素で構成された複雑な財務データテーブルを仮想スクロール環境下でも完全にコピーできるChrome拡張機能の実装ガイド","md",{},"/chrome-extension-table-data-copier",false,"2025-12-01T00:00:00.000Z",{"title":5,"description":4551},"2025-12/2025-12-01/chrome-extension-table-data-copier",[4560,4561,4562,4563,4564],"Chrome拡張機能","JavaScript","仮想スクロール","テーブル","Web開発","KXND0R0LZDd-MBSjl5c2rjNUeCjHjpK3OUY0TNihPuQ",[],[4568,4572,4576,4580,4583],{"title":4569,"path":4570,"publishedAt":4571},"会計ソフトA内部APIハンズオン3記事のスタイル統一と実機検証","/mf-internal-api-handson-live-verification","2026-06-21T00:00:00.000Z",{"title":4573,"path":4574,"publishedAt":4575},"KindleをyomitokuパイプラインにつなぐChrome拡張の設計と試行錯誤","/kindle-screenshot-extension-yomitoku-pipeline","2026-06-17T00:00:00.000Z",{"title":4577,"path":4578,"publishedAt":4579},"IIFE（即時実行関数式）とは何か ― なぜ昔は使われ、今ES Modules時代に減ったのか","/iife-immediately-invoked-function-expression","2026-06-09T00:00:00.000Z",{"title":4581,"path":4582,"publishedAt":4579},"Number.isFinite と isFinite の違い ― JavaScript で「有限の数か」を判定する正しい書き方","/number-isfinite-explained",{"title":4584,"path":4585,"publishedAt":4579},"厳密等価演算子（===）と等価演算子（==）の違い ― JavaScript で == を使わない方がいい理由","/strict-equality-vs-loose-equality","https://log.eurekapu.com/og/blog/chrome-extension-table-data-copier.png?v=2025-12-01T00%3A00%3A00.000Z&title=Chrome%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD%20-%20%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B3%E3%83%94%E3%83%BC%E6%A9%9F%E8%83%BD%E3%81%AE%E5%AE%9F%E8%A3%85%E3%83%89%E3%82%AD%E3%83%A5%E3%83%A1%E3%83%B3%E3%83%88&author=Kei%20Komatsu&sig=e89ef4f9d51c214d",1785654666844]