我想通过将我的数据输出到Excel来设置行高。我尝试了下面的内容,但是收到了
的调试错误无法将“System.Web.UI.WebControls.DataGridItem”的对象类型转换为要键入 'System.Web.UI.WebControls.GridViewRow'
这是我的语法
public void ExportToExcel(DataTable dataTable)
{
string filename = "Bamo.xls";
StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);
DataGrid dgGrid = new DataGrid();
dgGrid.DataSource = dataTable;
dgGrid.DataBind();
int j = 0;
foreach(GridViewRow gvrow in dgGrid.Items)
{
if (j % 2 != 0)
{
for (int k = 0; k < gvrow.Cells.Count; k++)
{
gvrow.Cells[k].Style.Add("Height", "10");
}
}
j++;
}
}
答案 0 :(得分:0)
以下代码段演示.NET DataTable
导出到MS Excel工作表和与各种数据类型相关的格式化技术(用C#编码):
public bool Export2Excel(DataTable dataTable)
{
object misValue = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application _appExcel = null;
Microsoft.Office.Interop.Excel.Workbook _excelWorkbook = null;
Microsoft.Office.Interop.Excel.Worksheet _excelWorksheet = null;
try
{
if (dataTable.Rows.Count <= 0) { throw new ArgumentNullException("Table is Empty"); }
// excel app object
_appExcel = new Microsoft.Office.Interop.Excel.Application();
// excel workbook object added to app
_excelWorkbook = _appExcel.Workbooks.Add(misValue);
_excelWorksheet = _appExcel.ActiveWorkbook.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
// column names row (range obj)
Microsoft.Office.Interop.Excel.Range _columnsNameRange;
_columnsNameRange = _excelWorksheet.get_Range("A1", misValue).get_Resize(1, dataTable.Columns.Count);
// column names array to be assigned to _columnNameRange
string[] _arrColumnNames = new string[dataTable.Columns.Count];
// set Excel columns NumberFormat property
// note; most important for decimal-currency, DateTime
for (int i = 0; i < dataTable.Columns.Count; i++)
{
// array of column names
_arrColumnNames[i] = dataTable.Columns[i].ColumnName;
string _strType = dataTable.Columns[i].DataType.FullName.ToString();
switch (_strType)
{
case "System.DateTime":
{
_excelWorksheet.Range["A1"].Offset[misValue, i].EntireColumn.NumberFormat = "MM/DD/YY";
break;
}
case "System.Decimal":
{
_excelWorksheet.Columns["A"].Offset[misValue, i].EntireColumn.NumberFormat = "$ #,###.00";
break;
}
case "System.Double":
{
_excelWorksheet.Columns["A"].Offset[misValue, i].EntireColumn.NumberFormat = "#.#";
break;
}
case "System.Int8":
case "System.Int16":
case "System.Int32":
case "System.Int64":
{
// use general format for int
//_excelWorksheet.Columns["A"].Offset[misValue, i].EntireColumn.NumberFormat = "####";
break;
}
default: break;
}
}
// assign array to column headers range, make 'em bold
_columnsNameRange.set_Value(misValue, _arrColumnNames);
_columnsNameRange.Font.Bold = true;
// populate data content row by row
for (int Idx = 0; Idx < dataTable.Rows.Count; Idx++)
{
_excelWorksheet.Range["A2"].Offset[Idx].Resize[1, dataTable.Columns.Count].Value =
dataTable.Rows[Idx].ItemArray;
}
// Autofit all Columns in the range
_columnsNameRange.Columns.EntireColumn.AutoFit();
// quit excel app process
if (_appExcel != null)
{
_appExcel.UserControl = false;
_appExcel.Quit();
}
return true;
}
catch { throw; }
finally
{
_excelWorksheet = null;
_excelWorkbook = null;
_appExcel = null;
misValue = null;
}
}
#endregion
您可以根据自己的特定目的进行自定义。 希望这可能有所帮助。
答案 1 :(得分:-1)
我使用您的代码已有一段时间,但为字符串添加了额外的格式:
case "System.String":
{
// format as text
_excelWorkSheet.Columns["A"].Offset[misValue, i].EntireColumn.NumberFormat = "@";
break;
}
这解决了一个问题(HRESULT异常:0x800A03EC错误),当您导出到excel时,在任何字符串的开头都有一个等于(=)的符号。 Excel将其识别为调用或公式的开始,因此它尝试解决可能不存在或无法完成的事情。