【发布时间】:2022-11-15 15:38:24
【问题描述】:
我有一个 datagridview 并且已经有一个使用 Microsoft interop 的导出功能,但是我正在努力寻找加载数据的解决方案。
我要导出到 Excel 的代码:
private void iSave()
{
Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing);
Microsoft.Office.Interop.Excel._Worksheet worksheet = null;
app.Visible = true;
worksheet = workbook.Sheets["Journal"];
worksheet = workbook.ActiveSheet;
worksheet.Name = "Exported from Journal Pro";
for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
{
worksheet.Cells[1, i] = dataGridView1.Columns[i - 1].HeaderText;
}
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
}
}
}
我还希望它从第二行添加数据,因为第一行是列的标题。 如果有解决方案使用 excel 以使用导出的相同格式加载数据,我将不胜感激:)
我也对其他保存方法持开放态度,它不必是 excel 文件。
我使用了一些在网上找到的其他代码,例如
`
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Filter = "Excel Files Only | *.xlsx; *.xls";
ofd.Title = "Choose the File";
if (ofd.ShowDialog() == DialogResult.OK)
FileName_LBL.Text = ofd.FileName;
}
Microsoft.Office.Interop.Excel._Application xlapp;
Microsoft.Office.Interop.Excel._Workbook xlworkbook;
Microsoft.Office.Interop.Excel._Worksheet xlworksheet;
Microsoft.Office.Interop.Excel._Worksheet xlrange;
try
{
xlapp = new Microsoft.Office.Interop.Excel.Application();
xlworkbook = xlapp.Workbooks.Open(FileName_LBL.Text);
xlworksheet = xlworkbook.Worksheets["Exported from Journal Pro"];
xlrange = (Microsoft.Office.Interop.Excel._Worksheet)xlworksheet.UsedRange;
dataGridView1.ColumnCount = xlrange.Columns.Count;
for (int xlrow = 2; xlrow <= xlrange.Rows.Count; xlrow++)
{
dataGridView1.Rows.Add(xlrange.Cells[xlrow, 2].Text, xlrange.Cells[xlrow, 3].Text, xlrange.Cells[xlrow, 4].Text, xlrange.Cells[xlrow, 5].Text, xlrange.Cells[xlrow, 6].Text, xlrange.Cells[xlrow, 7].Text);
}
xlworkbook.Close();
xlapp.Quit();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
`
但我收到错误,例如DISP_E_BADINDEX和E_NOINTERFACE
【问题讨论】:
-
将数据放入 DataTable 比直接放入 DGV 更好。然后可以使用 datagridview1.DataSource = dt。然后,您可以使用 DataTable SaveXml 方法写入文件并使用 ReadXml 从文件中恢复数据表。
-
@jdweng 为此干杯,我将开始更改它。再次感谢 :)
标签: c# visual-studio office-interop