【问题标题】:How to input data in excel sheets?如何在excel表格中输入数据?
【发布时间】:2019-07-24 17:27:00
【问题描述】:

我正在尝试做这样的事情:

我正在尝试在 Excel 工作表中添加数据。仅当我将数据添加到第一列中的单元格时,才能正确完成此操作。在该文件名与单元格数据一起出现之后。例如,如果单元格是 C5,它会将 4 个文件名附加到每个输入,然后是数据。 有人可以帮我解决我做错的事情吗?

public void Create()
    {
        string filepath = string.Empty;
        using (ExcelEngine excelEngine = new ExcelEngine())
        {
            IApplication application = excelEngine.Excel;
            application.DefaultVersion = ExcelVersion.Excel2016;
            IWorkbook workbook = application.Workbooks.Create(1);          
            IWorksheet namedSheet = workbook.Worksheets[0];

            namedSheet.Range["A1"].Text = "Hey there";
            namedSheet.Range["A2"].Text = "Good Morning";
            namedSheet.Range["A6"].Text = "Here I am!";
            namedSheet.Range["B5"].Text = "1";

            MemoryStream ms = new MemoryStream();
            workbook.SaveAs(ms, "0.xlsx");
            byte[] bytes = ms.ToArray();
            ms.Flush();
            ms.Close();
            Response.Clear();
            Response.AddHeader("Content-Disposition", "attachment; filename=foo.xls");
            Response.AddHeader("Content-Length", bytes.Length.ToString());
            Response.ContentType = "application/octet-stream";
            Response.BinaryWrite(bytes);
    }
}

嘿那里0.xlsx
早上好0.xlsx
0.xlsx1
我在这里!0.xlsx
使用 Syncfusion Essential XlsIO 的试用版创建

【问题讨论】:

  • 您为什么要将此文件以 .xls 扩展名提供给最终用户,而将其以 .xlsx 扩展名保存在磁盘上?我会假设 .xlsx 是正确的,因为您指定了 Excel 2016。
  • @mason 这是骗人的。 SaveAs 的重载不使用第二个参数作为文件名。它实际上并没有保存到磁盘。
  • 您应该在获取其数组缓冲区之前刷新数组。
  • @Amy 有趣。从未与 Syncfusion 合作过。 renu - 我的建议仍然是确保您使用正确的扩展名和MIME Type 向用户提供文件。或者,如果您正在使用 CSV,则使用 .csv 和 text/csv

标签: c# asp.net-mvc syncfusion


【解决方案1】:

根据SyncFusion documentationSaveAs 方法并没有像您认为的那样做。第二个参数不是文件名,而是分隔符。它保存了一个 CSV,其中第二个参数用作分隔符。

签名:
void SaveAs( Stream stream, string separator )

参数
stream - 要保存的流。
分隔符 - 表示 CSV 文件类型的分隔符。

您应该只使用SaveAs(ms)

【讨论】:

  • 啊哈,这也行。它将生成一个以逗号作为分隔符的 CSV 文件。
  • @renu 如果我的回答有帮助,请考虑接受和/或投票。有关更多信息,请参阅meta.stackexchange.com/questions/5234/…。如果我的回答不够充分,请告诉我需要如何修改,谢谢。
【解决方案2】:

您正在使用分隔符“0.xlsx”保存流,因此添加的文本会附加“0.xlsx”。如果您希望将文件另存为 csv,请将分隔符参数提供为“,”,并将文件扩展名提供为 csv。请从您的 sn-p 中找到更新后的代码。

using (ExcelEngine excelEngine = new ExcelEngine())
            {
                IApplication application = excelEngine.Excel;
                application.DefaultVersion = ExcelVersion.Excel2016;
                IWorkbook workbook = application.Workbooks.Create(1);
                IWorksheet namedSheet = workbook.Worksheets[0];

                namedSheet.Range["A1"].Text = "Hey there";
                namedSheet.Range["A2"].Text = "Good Morning";
                namedSheet.Range["A6"].Text = "Here I am!";
                namedSheet.Range["B5"].Text = "1";

                MemoryStream ms = new MemoryStream();
                workbook.SaveAs(ms, ",");
                byte[] bytes = ms.ToArray();
                ms.Flush();
                ms.Close();
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment; filename=foo.csv");
                Response.AddHeader("Content-Length", bytes.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.BinaryWrite(bytes);
            }

我们也准备了相同的样本,供大家参考。示例可从以下链接下载。

示例链接:https://www.syncfusion.com/downloads/support/directtrac/general/ze/Sample1353252283.zip

您也可以将文件保存为 xlsx 而无需提供分隔符参数。

请参阅下面的 API 参考以了解有关 SaveAs 的不同重载的更多信息

https://help.syncfusion.com/cr/file-formats/Syncfusion.XlsIO.Base~Syncfusion.XlsIO.IWorkbook~SaveAs.html

请参阅以下文档以了解有关使用 XlsIO 的更多信息

https://help.syncfusion.com/file-formats/xlsio/overview

问候,

阿比拉米

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多