【问题标题】:How to export DateTime, TimeSpan, string and double values to Excel from WPF MVVM application?如何将日期时间、时间跨度、字符串和双精度值从 WPF MVVM 应用程序导出到 Excel?
【发布时间】:2016-10-04 08:49:00
【问题描述】:

在我的 WPF MVVM Prism 应用程序中,我每秒从外部设备读取一些数据(通过 COM 端口)(我使用 System.Windows.Threading.DispatcherTimer)。每次我用读取的数据填充以下缓冲区时:

/// <summary>
/// Represents the point on the chart.
/// </summary>
public class ChartPoint
{
    #region Fields

    // The value from outer device.
    private double _value;
    // The date and time when the value was being obtained.
    private DateTime _category;

    #endregion

    #region Constructors

    public ChartPoint() { }

    public ChartPoint(DateTime category, double value)
    {
        this.Category = category;
        this.Value = value;
    }

    #endregion

    #region Properties

    public double Value
    {
        get { return this._value; }
        set
        {
            if (double.IsNaN(value) || double.IsInfinity(value))
                value = 0;
            this._value = value;
        }
    }
    public DateTime Category
    {
        get { return this._category; }
        set { this._category = value; }
    }

    #endregion
}

我需要将以下数据导出到 Microsoft Excel:

DateTime currentDate = ChartPoint.Category.Date;
TimeSpan currentTime = ChartPoint.Category.TimeOfDay;
double currentValue = ChartPoint.Value;

时间值必须在用户友好的视图中,例如:09:21:54 (hh:mm:ss)。这里必须加上测量超声波束的名称。例如:

string measuringBeam = "beam 1";
            or
string measuringBeam = "beam 2";

等等,梁的总数 - 八 (8)。所以MS Excel表格中每一行的格式必须是:

____________________________________________________________
| Current Date | Current Time | Measuring Beam | The Value |
------------------------------------------------------------
|  04.10.2016  |   09:21:54   |     beam 1     |    347.25 |
------------------------------------------------------------
  . . . . . . . . . . . . . and so on. . . . . . . . . . . .

我认为在每个计时器滴答期间应该创建每一下一行。所以我需要以编程方式创建包含具有上述格式的表格的 MS Excel 文件,将此文件保存在特定文件夹中,并在那里添加新行。我认为提高导出率不应该是每行,而是每十行甚至每百行。也就是说,一旦创建了下一百行,它就会存储在 Excel 文件中。整个导出操作将通过选择下拉菜单中的相应项来运行,并以同样的方式停止。每次导出开始时,都必须为导出的数据创建一个新的 Excel 文件。我之前和 VSTO 都没有使用过 Excel 对象模型。但现在遇到这样的必然。我开始在 MSDN 中阅读有关 VSTO 的内容,但我对创建我的应用程序的条款感到非常拥挤。请帮助创建导出到 Excel。好榜样将是​​伟大的。您的帮助将不胜感激。

【问题讨论】:

    标签: c# wpf excel data-export


    【解决方案1】:

    您不需要 VSTO 或互操作。 XLSX 是 XML 文件的压缩集合,可以使用 Open XML SDK 或类似 EPPLus 的库创建,只需添加适当的 NuGet package 即可安装。如果您愿意,您甚至可以自己生成 XML 文件,尽管像 EPPlus 这样的库使这变得容易得多。

    您可以使用 LoadFromDataTable 或 LoadFromCollection 类从数据表或强类型列表轻松生成 Excel 工作表,例如:

    using (ExcelPackage pck = new ExcelPackage())
    {
        //Create the worksheet
        ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo");
    
        //Load the datatable into the sheet, starting from cell A1. 
        //Print the column names on row 1
        //Apply the Dark1 style
        ws.Cells["A1"].LoadFromDataTable(tbl, true, TableStyles.Dark1);
    
    
        pck.SaveAs(new FileInfo(@"c:\temp\MyFile.xlsx"));
    }
    

    使用强类型集合同样简单:

         sheet.Cells["A1"].LoadFromCollection(items, true, TableStyles.Dark1);
    

    Excel 工作表可以保存到任何流中。 [Web 应用程序示例] 展示了如何将包保存到 Web 应用程序的响应流中,从而允许您创建真正的 Excel 文件,而不是带有虚假 xlsx 扩展名的 CSV 或 HTML 文件

    【讨论】:

    • 非常感谢,Panagiotis Kanavos,但我希望看到一个适用于我的案例的 VSTO Excel 对象模型的好例子。
    • VSTO 旨在创建插件和宏,而不是生成 Excel 文件。如果要将 1000 行导出到 Excel 文件,VSTO 将无济于事。这些插件需要安装 Excel 才能运行。这不是问题要问的,除非在最后一段中提到。
    • EPPlus 对我的需求来说真的是件好事吗?我在哪里可以找到探索 EPPLus 的文档?
    • 您是否检查了答案中的链接?你想要一些具体的东西吗? EPPlus 网站不涵盖 Excel 术语,例如范围是什么或 Excel 寻址的工作原理
    • 请给我一个示例,说明如何仅针对我的情况自动化 Microsoft Excel。提前非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多