次の方法で共有

sheet1.xmlのsheetDataの順番について

Anonymous
2022-02-28T04:38:48+00:00

xlsxを解凍し、sheet1.xmlの<sheetData>にデータの並びが保存されているとおもいます

通常は下記のように0,1,2.....と昇順に並ぶとおもいます。

		&lt;c r="A1" t="s"&gt;

			&lt;v&gt;0&lt;/v&gt;

		&lt;/c&gt;

		&lt;c r="B1" t="s"&gt;

			&lt;v&gt;1&lt;/v&gt;

		&lt;/c&gt;

		&lt;c r="C1" t="s"&gt;

			&lt;v&gt;2&lt;/v&gt;

		&lt;/c&gt;

他者から頂いたxlsxを確認したところ

12,0,1...と昇順にならんでいませんでした。

		&lt;c r="A1" t="s"&gt;

			&lt;v&gt;12&lt;/v&gt;

		&lt;/c&gt;

		&lt;c r="B1" t="s"&gt;

			&lt;v&gt;0&lt;/v&gt;

		&lt;/c&gt;

		&lt;c r="C1" t="s"&gt;

			&lt;v&gt;1&lt;/v&gt;

		&lt;/c&gt;

このようなデータの並びはどのような時に発生するのかご存じの方いらっしゃいませんでしょうか?

この質問は、

自作のC#アプリにてExcelのインポート処理を行った際に

「Excelシートへのアクセスにおいて、エラーが発生しました。

ウィンドウの Left、Top は -32768 と 32767 に設定する必要があります」

のエラーが発生したため、正常にインポートできたファイルと比較した際に発見しました。

Microsoft 365 と Office | Excel | ビジネス向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

4 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2022-03-02T02:10:58+00:00

    > <c r="B1" t="s">> <v>0</v>> </c>> sharedStrings.xml> <si>> <t>セルB1</t>> <rPh sb="0" eb="4">> <t>セルビーイチ</t>> </rPh>> <phoneticPr fontId="1"/>> </si>

    Cell クラスの t 属性が "s" であるなら、
    そのセルのタイプは「共有文字列」です。

    Working with sheets (Open XML SDK)

    引用:

    > String values in a cell are not stored in the cell table > unless they are the result of a calculation. > Therefore, instead of seeing External Link: as the content > of the cell's v node, instead you see a zero-based index > into the shared string table where that string is stored > uniquely. > This is done to optimize load/save performance and to reduce > duplication of information. To determine whether the 0 in > v is a number or an index to a string, the cell's data type > must be examined. > When the data type indicates string, then it is an index > and not a numeric value.

    CellValue Class

    引用:

    > This element expresses the value contained in a cell.> If the cell contains a string, then this value is > an index into the shared string table, pointing to > the actual string value.> Otherwise, the value of the cell is expressed directly> in this element.> Cells containing formulas express the last calculated > result of the formula in this element.

    つまり B1 セルの値は、共有文字列テーブルにおける
    0 番目のノード( si 要素)で定義されている文字列である

    ということです。

    > このようなデータの並びはどのような時に発生するのか> ご存じの方いらっしゃいませんでしょうか?> このようなデータの並びになる手法がわかれば。と思いました。

    手法も何も、ユーザーが Excel アプリケーションを使って
    ワークシートを自由に編集した結果としてそのようになっている
    だけではないでしょうか。

    例えば、以下に示す通りの操作によって作成、保存されたブックにおいて、
    それぞれの xml がどのように記述されることになるか確認してみて下さい。


    1. Excel を起動し、新規ブックを作成する。
    2. ワークシート[Sheet1]の B1 セルに "ABC" という文字列を入力する。
    3. ワークシート[Sheet1]の C1 セルに "DEF" という文字列を入力する。
    4. ワークシート[Sheet1]の A1 セルに "GHI" という文字列を入力する。
    5. 新規ワークシート[Sheet2]を挿入する。
    6. ワークシート[Sheet2]の A1 セルに "DEF" という文字列を入力する。
    7. そのブックに名前をつけて保存し、ブックを閉じる。

    ( xl/worksheets/sheet1.xml より抜粋)

    <sheetData>
    <row r="1" spans="1:3" x14ac:dyDescent="0.15">
    	<c r="A1" t="s">
    		<v>2</v>
    	</c>
    	<c r="B1" t="s">
    		<v>0</v>
    	</c>
    	<c r="C1" t="s">
    		<v>1</v>
    	</c>
    </row>
    </sheetData>
    

    ( xl/worksheets/sheet2.xml より抜粋)

    <sheetData>
    <row r="1" spans="1:1" x14ac:dyDescent="0.15">
    	<c r="A1" t="s">
    		<v>1</v>
    	</c>
    </row>
    </sheetData>
    

    ( xl/sharedStrings.xml より抜粋)

    <si>
    <t>ABC</t>
    <phoneticPr fontId="1"/>
    </si>
    <si>
    <t>DEF</t>
    <phoneticPr fontId="1"/>
    </si>
    <si>
    <t>GHI</t>
    <phoneticPr fontId="1"/>
    </si>
    

    上記の結果から分かる通り、そのブック内のいずれかのセルに対して
    新しい文字列が格納されるごとに、共有文字列テーブルに新規ノードが
    追加され、そのインデックスがそのセルの v 要素にセットされます。

    また、セルに対して入力された文字列が既に共有文字列テーブルに
    存在する場合は、該当する共有文字列( n 番目のノード)の
    インデックスがそのセルの v 要素にセットされます。

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Anonymous
    2022-03-02T04:50:37+00:00

    ありがとうございました。
    おっしゃる通りの結果になりました。

    ご指摘の通り前述のデータの並びは

    エラーの原因ではないということが理解できました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2022-02-28T23:48:29+00:00

    sk.exe様、ありがとうございます。

    さらに確認しておりますが

    sharedStrings.xml

    に文字列系の値が保存されており

    &lt;si&gt;
    
    	&lt;t&gt;セルB1&lt;/t&gt;
    
    	&lt;rPh sb="0" eb="4"&gt;
    
    		&lt;t&gt;セルビーイチ&lt;/t&gt;
    
    	&lt;/rPh&gt;
    
    	&lt;phoneticPr fontId="1"/&gt;
    
    &lt;/si&gt;
    
    &lt;si&gt;
    
    	&lt;t&gt;セルC1&lt;/t&gt;
    
    	&lt;rPh sb="0" eb="3"&gt;
    
    		&lt;t&gt;セルシーイチ&lt;/t&gt;
    
    	&lt;/rPh&gt;
    
    	&lt;phoneticPr fontId="1"/&gt;
    
    &lt;/si&gt;
    

    &lt;si&gt;
    
    	&lt;t&gt;セルA1&lt;/t&gt;
    
    	&lt;rPh sb="0" eb="4"&gt;
    
    		&lt;t&gt;セルエーイチ&lt;/t&gt;
    
    	&lt;/rPh&gt;
    
    	&lt;phoneticPr fontId="2"/&gt;
    
    &lt;/si&gt; 
    

    このように

    sheet1.xmlの順番と同じになっているようです。

    おっしゃる通り

    excelとしては正しいデータとして扱われているのだと思います。

    このようなデータの並びになる手法がわかれば。と思いました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2022-02-28T06:21:45+00:00

    > 他者から頂いたxlsxを確認したところ> 12,0,1...と昇順にならんでいませんでした。> <c r="A1" t="s">> <v>12</v>> </c>> <c r="B1" t="s">> <v>0</v>> </c>> <c r="C1" t="s">> <v>1</v>> </c>

    Cell クラスの v 要素は「セルの値」を表すものであって、
    セル/行/列の並び順とは無関係でしょう。

    > この質問は、> 自作のC#アプリにてExcelのインポート処理を行った際に> 「Excelシートへのアクセスにおいて、エラーが発生しました。> ウィンドウの Left、Top は -32768 と 32767 に設定する必要があります」> のエラーが発生したため、正常にインポートできたファイルと比較した際に発見しました。

    少なくとも、上記のエラーに直接関係するような要素であるとは
    考えにくいです。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません