複数のユーザーが生成プロセスを同時に実行しようとしたためにファイル生成が失敗するのを防ぐために、何か(スレッド化など)を行う必要があるかどうか疑問に思っています。
潜在的な問題がある場合は、それを回避するためのアイデアを知りたい.
私のプロセスの概要。
- ユーザーがボタンをクリックしてプロセスを開始します。
- データはデータソースから収集され、テスト用にダミー化されます。
- Template.xls を開く
- 開いたテンプレートにデータが挿入されます。
- SaveAs は、開いている Excel ファイルに対して呼び出されます。
- 必要なファイルがすべて作成されるまで、このプロセスが繰り返されます。
- すべてのファイルをまとめて圧縮
- プロセスが正常に完了したかどうかがユーザーに通知され、ファイルの zip をダウンロードするように求められます。
注: これは現時点での概念実証であるため、ハードコードされたファイル名の値が存在します。
以下の生成コードを参照してください
private Boolean GenerateExcelFile(int filenum, int totalfiles, int Year)
{
String TemplateFilename = "C:\\exceldocs\\Templates\\OSHA300_Template.xls";
try
{
Excel._Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
//Start Excel and get Application object.
oXL = new Excel.Application();
oXL.Visible = false;
//Open the workbook template.
//oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
oWB = (Excel._Workbook)(oXL.Workbooks.Open(TemplateFilename));
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
oSheet.Cells[3, 11] = Year;
oSheet.Cells[PAGEOFROW, PAGEOFCOL] = filenum + " of " + totalfiles;
int currentexcelrow = STARTROW;
foreach (OSHArow row in this)
{
FillOutRow(oSheet, row, currentexcelrow++);
if (currentexcelrow == 38)
{
//break;
}
}
FillOutSummaryRow(oSheet);
File.Delete("C:\\exceldocs\\OshaOutput\\OSHA300_TestResult" + filenum + ".xls");
oWB.SaveAs("C:\\exceldocs\\OshaOutput\\OSHA300_TestResult" + filenum + ".xls");
oWB.Close(true);
}
catch (Exception e)
{
//TODO: configure an exception log.
throw e;
return false;
}
return true;
}