Ich versuche, eine Datentabelle in eine XLS-Datei zu exportieren. Hier sind meine Code:So ändern Sie XLS Spalte DataType mit .NET
using ExcelIt = Microsoft.Office.Interop.Excel;
protected void Export2xlsWorkBook(string filename)
{
if (filename != string.Empty)
{
if (filename.EndsWith(".xls"))
filename = txtNewFileName.Text + ".xls";
}
else
filename = "NewFile.xls";
filename = "C:\\Documents and Settings\\My Documents\\Exported XLS\\" + filename;
ExcelIt.Application objXL = new ExcelIt.Application();
ExcelIt.Workbook oWB;
ExcelIt.Worksheet oSheet;
ExcelIt.Range oRange;
objXL.Visible = true;
objXL.DisplayAlerts = false;
oWB = objXL.Workbooks.Add(Missing.Value);
DataTable dt = CreateDataTable();
oSheet = (ExcelIt.Worksheet)oWB.ActiveSheet;
oSheet.Name = "Exported Table";
int rowCount = 1;
foreach (DataRow dr in dt.Rows)
{
rowCount += 1;
for (int i = 1; i < dt.Columns.Count + 1; i++)
{
if (rowCount == 2)
{
oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName;
}
oSheet.Cells[rowCount, i] = dr[i - 1].ToString();
}
}
oRange = oSheet.get_Range(oSheet.Cells[1, 1],
oSheet.Cells[rowCount, dt.Columns.Count]);
oRange.EntireColumn.AutoFit();
oRange = oSheet.get_Range(oSheet.Cells[1, 2], oSheet.Cells[rowCount + 10, dt.Columns.Count]);
oSheet.Protection.AllowEditRanges.Add("NonePK", oRange, Missing.Value);
oRange = oSheet.get_Range(oSheet.Cells[rowCount + 1, 1], oSheet.Cells[rowCount + 10, 1]);
oSheet.Protection.AllowEditRanges.Add("PKEmptyRow", oRange, Missing.Value);
oSheet._Protect(Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
oSheet = null;
oRange = null;
oWB.SaveAs(filename, ExcelIt.XlFileFormat.xlWorkbookNormal,
Missing.Value, Missing.Value, Missing.Value, Missing.Value,
ExcelIt.XlSaveAsAccessMode.xlExclusive,
Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value);
oWB.Close(Missing.Value, Missing.Value, Missing.Value);
oWB = null;
objXL.Quit();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
Aus bestimmten Gründen möchte ich mag: alle Spalten Set-Datentyp in Text. Derzeit, da ich nichts angegeben habe, werden die Datentypen stattdessen in "allgemein" gesetzt.
Kann mir jemand Ratschläge geben, wie dies zu erreichen ist? Grüße
verwenden kann ich bemerkt, dass Sie nicht COM Bereinigung tun. Tun Sie dies für jede Interop-Referenz. Hoffe es hilft! if (writeRange! = null) { Marshal.FinalReleaseComObject (writeRange); writeRange = null; } –