私は非常に特別な問題を抱えています。私は自分と同様の問題を探し、誰もが提案した多くの解決策をテストしましたが、どれも私が必要としているものではありません。
私のクライアントは、データ シートを Excel 形式でエクスポートする必要があります。これらのデータは、並べ替え、変更、再配置、新しい値の入力が可能であり、一部の行が消えたり、別の行が代わりになったりする可能性があります。要するに、それらのデータに何かが起こる可能性があります。例として、食料品店のリストに表示されているアイテムのリストをエクスポートするとします。
ItemID ItemName Price
Fr01 Apple 2.5
Fr02 Orange 4.0
Mt01 Beef 10.0
Mt02 Pork 8.33
Vg01 Carrot 1.25
私の問題は、このデータを最初にExcelを作成したソフトウェアにインポートして、「ItemID」に基づいてデータベースでこれらの値を更新(または追加)できることです。データの値と型、相互関係が「正しい」かどうかは、既に検証しています。
範囲に名前を付けてみました。問題は、データがフィルター/ソートされている場合、名前がコンテンツに従わず、同じ位置に静止していることです
original : (範囲名は範囲の名前であり、実際の列ではありません)
ItemID ItemName Price || Range Name
Fr01 Apple 2.5 || data_fr01
Fr02 Orange 4.0 || data_fr02
Mt01 Beef 10.0 || data_mt01
Mt02 Pork 8.33 || data_tm02
Vg01 Carrot 1.25 || data_vg01
ItemName で並べ替えた後:
ItemID ItemName Price || Range Name
Fr01 Apple 2.5 || data_fr01
Mt01 Beef 10.0 || data_fr02
Vg01 Carrot 1.25 || data_mt01
Mt02 Pork 8.33 || data_tm02
Fr02 Orange 4.0 || data_vg01
ご覧のとおり、Range Name を除くすべての情報が正しく続いているため、インポートしようとすると、多くのデータの不一致が発生しました。
私の他の試みは、NameRange を Excel の実際のセルにすることでした。この方法だと、セルは追従しますが、変更できるので、保護されたセルを作成してみます。残念ながら、そのため、行を挿入または削除することはできません。マスクされたシートに名前を付けるという回避策を見つけましたが、もう一度、シートを同期する必要があります。これは、前述と同じ理由で信頼できません。
さらに悪いことに、xls (97-2003) と xlsx の両方をサポートする必要があります。
したがって、「範囲名」データをセルに何らかの形で保存して、Excelユーザーには見えないようにする安定した回避策を探していますが、データを追跡して、再起動時に適切な場所で取得できるようにします-データのインポート。
前もって感謝します。
編集 :
最後に、C# アプリケーションからこのプロパティを書き込んで、同じプロパティを C# で読み戻せる必要があります。また、Excel ファイル形式と互換性があり、Excel ユーザーが表示も編集もできないが、元の値セットのままである必要があります。削除を除いてシート内のデータに起こります(範囲全体ではなく、Appleを書いたセルに置いてもかまいません)