Tag: c#

使用OpenXML C#获取Excel单元格的列索引

我一直在寻找一段时间,似乎无法find如何做到这一点。 我有一个Excel表格,我正在使用OpenXML阅读。 现在正常的事情是循环行,然后循环通过单元格获取值,这很好。 但是,随着值我需要的单元格的位置,这将是格式(rowindex,ColumnIndex)。 我设法得到rowIndex,但似乎无法find列索引。 我其实觉得这很容易,但显然不是。

如何使用OpenXML创buildExcel文件而不创build本地文件?

是否有可能使用OpenXML SDK创build和编辑Excel文档而不创build本地文件? 根据文档“创build”方法需要一个文件path,该文件path创build该文件的本地副本。 SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(filepath, SpreadsheetDocumentType.Workbook); 我在这里引用MSDN文章: https : //msdn.microsoft.com/en-us/library/office/ff478153.aspx 我的要求是创build文件,它应该由浏览器单击button下载。 任何build议?

从IIS上的Excel文件中读取有限的行

我有一个在IIS上托pipe的asp.net mvc应用程序。 我有一个用户上传包含50k +行的excel文件的表单。 我用下面的C#代码读取了excel文件。 public DataTable GetExcelDataTable(string fileName) { string connectionString = Path.GetExtension(fileName) == "xls" ? string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data source={0}; Extended Properties=Excel 8.0;", fileName) : string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", fileName); var conn = new OleDbConnection(connectionString); using (var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", conn)) { var ds = new DataSet(); adapter.Fill(ds); DataTable data = […]

使用ASP.NET在IE8中通过https下载文件

我试图让用户可以从我们的网站下载一个Excel电子表格,通过一个button来redirect通过这个: Response.Redirect(string.Format("../excel/ExcelForm.aspx?pathName=&fileNameDisplay={0}&fileNameUnique={1}", "spreadsheet.xls", fileName)); aspx页面只是通过Response对象发回文件,如下所示: Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment; filename=" + fileNameDisplay); Response.WriteFile(Server.MapPath(pathName + fileNameUnique)); Response.Flush(); Response.End(); 在我的机器上,一切正常,但是当我们把它放在服务器上时,HTTPS和无caching设置的组合给了我们一个错误:“Internet Explorer无法下载[blahblahblah]”。 显示excelbutton的页面上的caching设置: HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache); HttpContext.Current.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1); HttpContext.Current.Response.Expires = 0; HttpContext.Current.Response.AddHeader("Pragma", "no-cache"); HttpContext.Current.Response.AddHeader("cache-control", "private, no-cache, must-revalidate no-store pre-check=0 post-check=0 max-stale=0"); HttpContext.Current.Response.Cache.SetNoServerCaching(); 当我删除这些线,一切正常。 但是,由于其他原因,我不能删除它们。 所以我试着在向头文件添加东西之前,把下面一行添加到ExcelForm.aspx中: Response.ClearHeaders(); 这只是给我“Internet Explorer不能从[url]下载ExcelForm.aspx”。 而这就是我卡住的地方。 build议?

尝试使用NPOI创build一个新的.xlsx文件并写入

编辑: 我正在尝试编写一个小型控制台应用程序,该应用程序将从Excel电子表格中读取行,parsing这些行并将派生数据写入新的Excel文件。 我正在使用.NET和NPOI库。 我终于在挖掘后发现了Apache网站上的POI的Java文档。 这是我更新的代码,带有新的错误。 这实际上创build一个可读的文件,除了它只写文本到第三列。 public static void TransferXLToTable() { DataTable dt = new DataTable(); dt.Columns.Add("City", typeof(string)); dt.Columns.Add("State", typeof(string)); dt.Columns.Add("Zip", typeof(string)); using (FileStream stream = new FileStream(OpenFile(), FileMode.Open, FileAccess.Read)) { IWorkbook wb = new XSSFWorkbook(stream); ISheet sheet = wb.GetSheet("Sheet1"); string holder; int i = 0; do { DataRow dr = dt.NewRow(); IRow row = […]

为什么Microsoft.Office.Interop.Excel.Application.Quit()会使后台进程运行?

下面的代码留下一个Microsoft Excel后台进程运行,直到我的程序退出后: var excelApplication = new Application(); var workbooks = excelApplication.Workbooks; var workbook = excelApplication.Workbooks.Open(file.FullName); workbook.Close(); excelApplication.Workbooks.Close(); excelApplication.Quit(); Marshal.ReleaseComObject(workbook); Marshal.ReleaseComObject(workbooks); Marshal.ReleaseComObject(excelApplication); 为什么? 我错过了什么?

如何在Excel中使用C#在多个单元格周围设置边框

我正在创build一个创buildexcel文件的项目。 我无法在多个单元格上放置边框来组织Excel文件。 比方说,我想要一个从单元格B5到B10的边框。 B5,B6,B7之间不应该有边界 目前,我有这样的代码: workSheet_range = worksheet.get_Range("B5", "B10"); workSheet_range.Borders.Color = System.Drawing.Color.Black.ToArgb(); 它使边界,然而它放置在每个单元格的边界,而不是所有单元格的一个大边框。 我怎样才能做到这一点?

尝试使用EPPlus读取.xls文件时出错

以下代码对于.xlsx工作正常,但对于.xls不起作用。 我得到了这个错误信息 无法打开包装。 包是一个OLE复合文档。 如果这是一个encryption的包,请提供密码 码 string filepath = txtBrowse.Text; FileStream stream = System.IO.File.Open(filepath, FileMode.Open, FileAccess.ReadWrite); //1. Reading from a binary Excel file ('97-2003 format; *.xls) IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream); FileInfo newFile = new FileInfo(filepath); using (ExcelPackage package = new ExcelPackage(newFile)) { string sheetName = System.DateTime.Now.ToShortDateString(); foreach (OfficeOpenXml.ExcelWorksheet sheet in package.Workbook.Worksheets) { // Check the […]

在Excel中通过epplus调用公式

我在ASP.NET MVC4 C#项目中有一个Excel工作表,我可以使用EPPlus成功读取Excel工作表。 现在,我希望能够将2个数字传入单元格C:2和C:3,并且能够在C = 4中调用= SUM(C2:C3)的公式。 所以从C#我想传入4和6,并调用公式,并能够从C:4 40(SUM和10和30)返回结果。 我如何在C#中完成。 在下面的代码中,我得到了d.Average的零 d.Average = Convert.ToDouble(currentWorksheet.Cells["C4"].Value); 这是我在c#中的以下代码遍历一行。 using (var package = new ExcelPackage(existingFile)) { ExcelWorkbook workBook = package.Workbook; var currentWorksheet = workBook.Worksheets.First(); currentWorksheet.Workbook.CalcMode = ExcelCalcMode.Automatic; currentWorksheet.Cells["C4"].Formula = "=SUM(C2:C3)"; currentWorksheet.Cells["C2"].Value = 10; currentWorksheet.Cells["C3"].Value = 30; package.Save(); } using (var package = new ExcelPackage(existingFile)) { ExcelWorkbook workBook = package.Workbook; […]

添加新工作表到现有文件后C#interop:excel进程不退出

可能重复: 如何正确清理C#中的Excel互操作对象 我已经阅读了许多关于pipe理COM引用的其他线程,同时使用.Net-Excel互操作来确保Excel进程在退出时正确退出,到目前为止技术运行良好,但是最近我遇到了将新工作表添加到现有工作簿文件时出现问题。 下面的代码留下了一个僵尸Excel过程。 如果我将工作表添加到新创build的工作簿文件,它退出罚款。 如果我运行的代码不包括.Add()行,它退出罚款。 (我正在阅读的现有文件是由注释掉的代码创build的空文件) 有任何想法吗? //using Excel = Microsoft.Office.Interop.Excel; //using System.Runtime.InteropServices; public static void AddTest() { string filename = @"C:\addtest.xls"; object m = Type.Missing; Excel.Application excelapp = new Excel.Application(); if (excelapp == null) throw new Exception("Can't start Excel"); Excel.Workbooks wbs = excelapp.Workbooks; //if I create a new file and then add a […]