数据表到excel的转换

数据表到excel的转换,excel,xaml,data-binding,mvvm,datagrid,Excel,Xaml,Data Binding,Mvvm,Datagrid,我有一个填充datatable的datagrid,我想点击一个按钮将datatable导出到excel。我正在为此应用程序使用MVVM。在我看来,实现导出功能可以吗 其次,在使用xaml和桌面应用程序时,如何捕获网格及其细节 谁能给我提些建议吗?我是新来的 谢谢, Sagar这里有一个扩展方法,可以将任何数据表输出到csv(excel可以打开) 导入系统文本 导入System.IO 导入System.Runtime.CompilerServices 模块扩展方法 _ Public Sub Out

我有一个填充datatable的datagrid,我想点击一个按钮将datatable导出到excel。我正在为此应用程序使用MVVM。在我看来,实现导出功能可以吗

其次,在使用xaml和桌面应用程序时,如何捕获网格及其细节

谁能给我提些建议吗?我是新来的

谢谢,
Sagar

这里有一个扩展方法,可以将任何数据表输出到csv(excel可以打开)

导入系统文本
导入System.IO
导入System.Runtime.CompilerServices
模块扩展方法
_
Public Sub OutputAsCSV(ByVal dt作为数据表,ByVal filePath作为字符串)
使某人成为新的架线工
'将列名写入字符串生成器
Dim columnNames As String()=(从作为dt.Columns中数据列的列中选择col.ColumnName)。ToArray
sb.AppendLine(String.Join(“,”,columnNames))
'将每行中的单元格值写入字符串生成器
对于dt.行中作为DataRow的每一行
将字段设置为字符串()=(从row.ItemArray中的单元格选择CStr(单元格)).ToArray
sb.AppendLine(字符串连接(“,”字段))
下一个
'将字符串生成器写入文件
File.WriteAllText(文件路径,sb.ToString())
端接头
端模块

试试谷歌搜索一下。这是一个非常常见的问题,已经被问了很多。这是一个很好的答案

公共静态void ExportToExcel(IEnumerable exportData)
{
Excel.ApplicationClass Excel=新建Excel.ApplicationClass();
Excel.工作簿=Excel.Application.Workbooks.Add(true);
PropertyInfo[]pInfos=typeof(T).GetProperties();
如果(pInfos!=null&&pInfos.Count()>0)
{
int-iCol=0;
int-iRow=0;
foreach(pInfos.Where(W=>W.CanRead==true)中的属性info eachpinfos.info)
{
//添加列标题。。。
iCol++;
excel.Cells[1,iCol]=eachPInfo.Name;
}
foreach(exportData中的T项)
{
iRow++;
//添加每行的单元格数据。。。
iCol=0;
foreach(pInfos.Where(W=>W.CanRead==true)中的属性info eachpinfos.info)
{
iCol++;
excel.Cells[iRow+1,iCol]=eachPInfo.GetValue(item,null);
}
}
//未定义对象的全局缺少引用。。。
缺少对象=System.Reflection.missing.Value;
//如果要保存工作簿。。。
字符串filePath=System.IO.Path.GetTempPath()+DateTime.Now.Ticks.ToString()+“.xlsm”;
工作簿.SaveAs(filePath,Excel.XlFileFormat.xlOpenXMLWorkbookMacroEnabled,缺失,缺失,false,false,Excel.XlSaveAsAccessMode.xlNoChange,缺失,缺失,缺失,缺失);
//如果要使Excel可见并激活工作表。。。
excel.Visible=true;
Excel.Worksheet工作表=(Excel.Worksheet)Excel.ActiveSheet;
excel.Rows.EntireRow.AutoFit();
excel.Columns.entireclumn.AutoFit();
((Excel._工作表)工作表)。激活();
}
}

这就是我所做的,它帮助了我:

private readonly ICommand m_ExportButtonClick;
    private string ExcelFilePath = "";

    public ICommand ExportButtonClick { get { return m_ExportButtonClick; } }

    private void OnRunExport()
    {
        try
        {
            if (queryDatatable == null || queryDatatable.Columns.Count == 0)
                throw new Exception("ExportToExcel: Null or empty input table!\n");

            // load excel, and create a new workbook
            Excell.Application excelApp = new Excell.Application();
            excelApp.Workbooks.Add();

            // single worksheet
            Excell._Worksheet workSheet = excelApp.ActiveSheet;

            // column headings
            for (int i = 0; i < queryDatatable.Columns.Count; i++)
            {
                workSheet.Cells[1, (i + 1)] = queryDatatable.Columns[i].ColumnName;
            }

            // rows
            for (int i = 0; i < queryDatatable.Rows.Count; i++)
            {
                // to do: format datetime values before printing
                for (int j = 0; j < queryDatatable.Columns.Count; j++)
                {
                    workSheet.Cells[(i + 2), (j + 1)] = queryDatatable.Rows[i][j];
                }
            }

            // check fielpath
            if (ExcelFilePath != null && ExcelFilePath != "")
            {
                try
                {                        
                    workSheet.SaveAs(ExcelFilePath);
                    excelApp.Quit();
                    MessageBox.Show("Excel file saved!");
                }
                catch (Exception ex)
                {
                    throw new Exception("ExportToExcel: Excel file could not be saved! Check filepath.\n"
                        + ex.Message);
                }
            }
            else    // no filepath is given, the file opens up and the user can save it accordingly.
            {
                excelApp.Visible = true;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show("There is no data to export. Please check your query/ Contact administrator." + ex.Message);
        }
    }      
    #endregion
private只读ICommand m_exportButton单击;
私有字符串ExcelFilePath=“”;
public ICommand ExportButtonClick{get{return m_ExportButtonClick;}
私有void OnRunExport()
{
尝试
{
if(queryDatatable==null | | queryDatatable.Columns.Count==0)
抛出新异常(“ExportToExcel:Null或空输入表!\n”);
//加载excel,并创建新工作簿
Excell.Application excelApp=新的Excell.Application();
excelApp.Workbooks.Add();
//单一工作表
Excell.\u工作表工作表=excelApp.ActiveSheet;
//列标题
对于(int i=0;i
将其视为第三方库,以帮助清理部分代码neccessary@KyleMitClosedXML是基于ASP.net的,我需要在使用带有mvvm体系结构的xaml控件的应用程序中使用此功能。谢谢,我使用的是.net framework 4.0,我认为ApplicationClass不受4.0支持。当我尝试重构时,它不允许我这样做。