我有一个在WPF中创建的程序.它显示DataGrid来自MySQL数据库的数据.我想要做的是允许用户将内容导出DataGrid到Excel文件.这可能与WPF有关吗?
当我使用此处显示的方法时:https://www.outcoldman.ru/en/blog/show/201
导入到xls文件的唯一行是标题.
我也在寻找一些simillar来帮助将datagrid中的数据导出到excel中,但是没有找到任何有效的东西.我刚刚将DataGrid的内容转换为字符串的2D数组,并使用interop dll导出它.
代码看起来像这样:
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
object misValue = System.Reflection.Missing.Value;
Excel.Range rangeToHoldHyperlink;
Excel.Range CellInstance;
xlApp = new Excel.Application();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
xlApp.DisplayAlerts = false;
//Dummy initialisation to prevent errors.
rangeToHoldHyperlink = xlWorkSheet.get_Range("A1", Type.Missing);
CellInstance = xlWorkSheet.get_Range("A1", Type.Missing);
for (int i = 0; i < NumberOfCols; i++)
{
for (int j = 0; j <= NumberOfRows; j++)
{
xlWorkSheet.Cells[j + 1, i + 1] = DataToWrite[j][i];
}
}
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找一些格式化,那么它们也受到支持.我想添加一个超链接,以下代码执行此操作:
CellInstance = xlWorkSheet.Cells[j + 1, i + 1];
xlWorkSheet.Hyperlinks.Add(
CellInstance,
DataToWrite[j][i],
Type.Missing,
"Hover Text Comes Here",
"Text to be displayed");
Run Code Online (Sandbox Code Playgroud)
如果您希望第一行是标题,可以按如下方式突出显示它们:
Excel.Range Range1 = xlWorkSheet.get_Range("A1");
Range1.EntireRow.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
Range1.EntireRow.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightSkyBlue);
Range1.EntireRow.Font.Size = 14;
Range1.EntireRow.AutoFit();
Run Code Online (Sandbox Code Playgroud)
最后将excel保存在所需的路径中:
xlWorkBook.SaveAs(@FilePath, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close();
Run Code Online (Sandbox Code Playgroud)
对互操作的引用添加如下:
Right Click on the Project name -> Click "Add reference" -> Goto "COM" tab -> Search for "Microsoft Excel Object Library" click "OK" to add the reference.
Run Code Online (Sandbox Code Playgroud)
您必须使用以下命名空间:
using Excel = Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
Run Code Online (Sandbox Code Playgroud)