private bool SaveToExcel()
{
string FileName;
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.RestoreDirectory = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.AutoUpgradeEnabled = true;
saveFileDialog.Filter = "Execl files (*.xlsx)|*.xlsx";
saveFileDialog.FilterIndex = 1;
saveFileDialog.Title = "保存先のファイルを選択してください";
Excel.Application excel = new Excel.Application();
Excel.Workbook book = excel.Workbooks.Add(Excel.XlSheetType.xlWorksheet);
//Excel.Sheets woSheets = book.Worksheets;
Excel.Worksheet newSheet = null;
Excel.Workbook ReBook = excel.Workbooks.Add(Excel.XlSheetType.xlWorksheet);
try
{
//データ書き込み
if (this.Keys.Count > 0)
{
FileName = String.Format("{0:yyyyMMdd-HHmmss}", DateTime.Now) + "-R1&R2.xls";
//シート追加
newSheet = (Excel.Worksheet)book.Sheets.Add(
Type.Missing, Type.Missing, this.R1sheetNo.Count + this.R2sheetNo.Count - 1, Type.Missing);
if (!setData(saveFileDialog, book, newSheet, this.allR1Data, this.allR2Data, this.Keys,
this.R1sheetNo, this.R2sheetNo, FileName,this.startLine,this.endLine))
{
return false;
}
}
//データ書き込み
if (this.ReKeys.Count > 0)
{
FileName = String.Format("{0:yyyyMMdd-HHmmss}", DateTime.Now) + "-R1&R2.xls";
//シート追加
newSheet = (Excel.Worksheet)ReBook.Sheets.Add(
Type.Missing, Type.Missing, this.ReR1sheetNo.Count + this.ReR2sheetNo.Count - 1, Type.Missing);
if (!setData(saveFileDialog,ReBook, newSheet, this.ReallR1Data, this.ReallR2Data, this.ReKeys,
this.ReR1sheetNo, this.ReR2sheetNo, FileName,this.reStartLine,this.ReEndLine))
{
return false;
}
}
book.Close(false);
excel.Quit();
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
book.Close(false);
excel.Quit();
if (excel != null)
{
Kill(excel);
}
return false;
}
finally
{
if (excel != null)
{
Kill(excel);
}
}
}
/// <summary>
/// プロセス閉じる
/// </summary>
/// <param name="excelApp"></param>
[System.Runtime.InteropServices.DllImport("User32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
private void Kill(Excel.Application excelApp)
{
IntPtr t = new IntPtr(excelApp.Hwnd);
int k = 0; GetWindowThreadProcessId(t, out k);
System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);
p.Kill();
}