在后台打开,修改,另存为Excel工作簿(Winforms,C#)

在我的应用程序中,我保存了一个空白的Excel文件格式的副本作为资源,我需要加载这个文件,修改它的两个工作表,将它保存在一个新的名称的位置。 用户不应该看到这个过程。

我正在使用C#2010与SQL服务器,我将加载我的数据,并把它放在Excel的forms。

感谢您的时间。

使用可以在.NET或COM中find的Microsoft Interop程序集(Microsoft.Office.Interop.Excel)然后将所有必需的单元格加载到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 (线程教程)

到目前为止你做了什么?

下面的两个链接应该有所帮助:

  • Microsoft Interop程序集从Microsoft.Office.Interop.Excel中的示例在这里
  • 您也可以在这里尝试ExcelPackage:http://EPPlus.codeplex.com

如果可能的话,我会尽量避免使Excel自动化,并使用OpenXML SDK(或包装OpenXML SDK的库)执行此任务。

这里有一篇文章可以帮助你开始。

我想你想这样做…至less为我工作。 🙂

  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"); }