私のアプリでは、空白の Excel ファイル フォームのコピーをリソースとして保存しました。このファイルを読み込み、両方のワークシートを変更し、新しい名前で新しい場所に保存する必要があります。ユーザーはそのプロセスを見るべきではありません。
私はSQLサーバーでC#2010を使用しています。そこからデータをロードしてExcelフォームに入れます。
お時間をいただきありがとうございます。
.NET または COM (Microsoft.Office.Interop.Excel) にある Microsoft Interop Assemblies を使用してから、必要なすべてのセルを にロードしList
、データを変更します。
このようなもの(以下のコード):
string path = @"C:\temp\test.xls";
ApplicationClass excelApllication = null;
Workbook excelWorkBook = null;
Worksheet excelWorkSheet = null;
excelApllication = new ApplicationClass();
System.Threading.Thread.Sleep(2000);
excelWorkBook = excelApllication.Workbooks.Add();
excelWorkSheet = (Worksheet)excelWorkBook.Worksheets.get_Item(1);
// Attention: 1 indexed cells, [Row, Col]
excelWorkSheet.Cells[1, 1] = "Column A, Row 1";
excelWorkSheet.Cells[2, 5] = "Column E, Row 2";
excelWorkSheet.Cells[3, 3] = "Column C, Row 3";
excelWorkBook.SaveAs(path, XlFileFormat.xlWorkbookNormal);
excelWorkBook.Close();
excelApllication.Quit();
Marshal.FinalReleaseComObject(excelWorkSheet);
Marshal.FinalReleaseComObject(excelWorkBook);
Marshal.FinalReleaseComObject(excelApllication);
excelApllication = null;
excelWorkSheet = null;
//opens the created and saved Excel file
Process.Start(path);
ユーザーにそのタスクを気付かせたくないので、これはスレッド内で発生する必要があります。
http://msdn.microsoft.com/en-us/library/aa645740%28v=vs.71%29.aspx (スレッドのチュートリアル)
可能であれば Excel の自動化を避け、このタスクには OpenXML SDK (または OpenXML SDK をラップするライブラリ) を使用します。
始めるのに役立つ記事を次に示します。
あなたはこれをやりたかったと思います...少なくとも私にとってはうまくいきました。:)
private void btnExcel_Click(object sender, EventArgs e)
{
string newDirectoryPath = ValidateDirectory();
string newFilePath = Path.Combine(newDirectoryPath, "new.xls");
//brand new temporary file
string tempPath = System.IO.Path.GetTempFileName();
//to manage de temp file life
FileInfo tempFile = new FileInfo(tempPath);
//copy the structure and data of the template .xls
System.IO.File.WriteAllBytes(tempPath,Properties.Resources.SomeResource);
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Open(tempPath, 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
//WorkTheExcelFile();
tempFile.Delete();
xlWorkBook.SaveAs(newFilePath);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
Process.Start(newFilePath + ".xlsx");
}