索引超出了数组的边界,而在C#中导出数据为excel

我有ASP.Net网站。 以下是我写入Excel的方法。

 public void JsonToExcel(string jsonData, HttpResponseBase response) { try { ExcelPackage excel = new ExcelPackage(); var worksheet = excel.Workbook.Worksheets.Add("Sheet1"); //below line is throwing the error worksheet.Cells[1, 1].LoadFromCollection(jsonData, true); using (MemoryStream swObj = new MemoryStream()) { string fileName = DateTime.Now.ToLongDateString() + ".xlsx"; response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; response.AddHeader("content-disposition", "attachment; filename=" + fileName + ""); excel.SaveAs(swObj); swObj.WriteTo(response.OutputStream); return; } } catch (Exception ex) { //handle exception return; } finally { response.Flush(); response.End(); } 

在函数的这一行 – worksheet.Cells[1, 1].LoadFromCollection(jsonData, true);

我收到以下例外

指数数组的边界之外

我尝试设置为worksheet.Cells[0,0]

我正在使用EPPlus 4.1.0软件包。

JSON示例: –

  string jsonData = @"jsonData = [ { ""DocumentName"": ""Test Document"", ""ActionDate"": ""2015-09-25T16:06:25.083"", ""ActionType"": ""View"", ""ActionPerformedBy"": ""Sreeja SJ"" }, { ""DocumentName"": ""Test Document"", ""ActionDate"": ""2015-09-25T16:12:02.497"", ""ActionType"": ""View"", ""ActionPerformedBy"": ""Sreeja SJ"" }, { ""DocumentName"": ""Test Document"", ""ActionDate"": ""2015-09-25T16:13:48.013"", ""ActionType"": ""View"", ""ActionPerformedBy"": ""Sreeja SJ"" }]"; 

我认为这是JSON和EPPlus方法的问题LoadFromCollection内部 LoadFromCollection方法需要一个集合,而不是一个任意的string或别的东西,所以当我用Newtonsoft.Json反序列化到一个合适的类似乎是好的。

 using System; using System.Collections.Generic; using System.IO; using Newtonsoft.Json; using OfficeOpenXml; namespace TestC { public class PostData { public string DocumentName { get; set; } public DateTime ActionDate { get; set; } public string ActionType { get; set; } public string ActionPerformedBy { get; set; } } class Program { static void Main(string[] args) { using (ExcelPackage package = new ExcelPackage()) { var worksheet = package.Workbook.Worksheets.Add("Sheet1"); string jsonData = @"[ { ""DocumentName"": ""Test Document"", ""ActionDate"": ""2015-09-25T16:06:25.083"", ""ActionType"": ""View"", ""ActionPerformedBy"": ""Sreeja SJ"" }, { ""DocumentName"": ""Test Document"", ""ActionDate"": ""2015-09-25T16:12:02.497"", ""ActionType"": ""View"", ""ActionPerformedBy"": ""Sreeja SJ"" }, { ""DocumentName"": ""Test Document"", ""ActionDate"": ""2015-09-25T16:13:48.013"", ""ActionType"": ""View"", ""ActionPerformedBy"": ""Sreeja SJ"" }]"; List<PostData> dataForExcel = JsonConvert.DeserializeObject<List<PostData>>(jsonData); worksheet.Cells[1, 1].LoadFromCollection(dataForExcel, true); package.SaveAs(File.Create(@"C:\Users\User\Documents\sample.xlsx")); } } } } 

结果是:

高强


要在Excel中输出正确的date,您应该为从第二行开始到第二行的第二列(ActionDate)中的单元格应用正确的数字格式:

 worksheet.Cells[2, 2, worksheet.Dimension.End.Row, 2].Style.Numberformat.Format = "yyyy-mm-ddThh:mm:ss.000";