2012-03-27 20 views
0

C#/ ASP.NET Webサイトでは、SpreadsheetGearを使用してテンプレートからファイルを開き、ユーザーの入力に基づいてファイルを変更し、新しい場所に保存します。保存後に新しく作成したファイルを手動で開こうとすると、編集のためにファイルがロックされているというSpreadsheetGearというメッセージが表示されます。私は非表示に考えることができる唯一のことはしても多少トリッキーであるセクションでは、列を削除し、左に他の列をシフトされた「ワークシートに記入し」Spreadsheetgearはファイルのロックを維持します

SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook(pathToTemplate); 
workbook.WorkbookSet.GetLock(); 
SpreadsheetGear.IWorksheet worksheet = workbook.Worksheets["sheetName"]; 
SpreadsheetGear.IRange cells = worksheet.Cells; 

//fill in worksheet 
... 

workbook.SaveAs(pathToGeneratedFiles + exportFileName, SpreadsheetGear.FileFormat.XLS97); 
workbook.WorkbookSet.ReleaseLock(); 

worksheet = null; 
workbook.Close(); 
workbook = null; 

:ここ

は、下のコードスニペットです。

どのような考えですか?ありがとう。

+0

「SpreadsheetGearが編集用にロックされたファイルを持っています」というエラーは、Microsoft Excelの場合のように聞こえます。 SpreadsheetGearは、Excelのように開いて編集している間はファイルをロックしません。通常、ディスクからファイルを読み書きするのに必要な時間だけファイルを「ロック」します。あなたが受け取ったエラーの正確な言葉は何ですか? –

+0

@Tim、 "は、 'SpreadsheetGear for .NET 1.6.0.122'によって編集のためにロックされています。そして、標準の読み取り専用、通知およびキャンセルのオプションが与えられます。他の誰かがファイルを開いていれば、私が得るエラーのように見えます。 –

答えて

0

したがって、私のプロジェクトのbinフォルダにあるSpreadsheetGear DLLの古いコピーが判明しました。我々がそれを更新すると、問題はなくなった。助けてくれてありがとう。

1

GetLock()を使用せずに試しましたか? GetLock()は、asp.netプログラミングを行うときには通常使用されません。 the website docsによると、

はスプレッドシートギア からコンポーネントを任意のWindowsに接続されていないワークブック セットを形成して使用する場合にGETLOCKとReleaseLockを使用する必要はありません。

+1

ダニエルは正しい。一般的なASP.NETシナリオでは、GetLock/ReleaseLockを使用する必要はありません。また、ロックを使用する正当な理由がある場合でも、releaseLock()を呼び出す前にworkbook.Close()行を実行する必要があります。 –

+0

元のコードにGetLock()またはReleaseLock()がなく、編集のためにロックされている保存されたファイルに問題がありました。これらの関数への呼び出しは、状況を解決するために追加されました。 –

+0

チェックできることは、GetWorkbook()を実行しているときに、Excelテンプレートファイルが閉じており、ロックファイルが接続されていないことを確認することです。テンプレートファイルにロックが設定されていると、これらの問題が発生する可能性があります。 – Daniel

関連する問題