0

在我的 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。好榜样将是​​伟大的。您的帮助将不胜感激。

4

1 回答 1

1

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

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

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 文件

于 2016-10-04T09:20:48.433 回答