6

NPOI を使用して Sheet1 に固定ワークシート テンプレートを作成しており、Sheet2 から日付形式のデータが必要です。データベースから DataTable を生成して Sheet2 にデータを設定します。それは私のコードです:

private DataTable getWeek()
{    
  strConn = WebConfigurationManager.ConnectionStrings["myConn"].ConnectionString;
  conn = new OdbcConnection(strConn);
  conn.Open();
  sql = "SELECT week, sunday, saturday FROM tb_weekreferences";     
  da = new OdbcDataAdapter(sql, conn);
  dt = new DataTable();
  da.Fill(dt);
  conn.Close();        

  return dt;

}

次に DataTable を Excel にエクスポートします。

private int ExportDataTableToExcel(DataTable sourceTable, ISheet sheet)
    {
        IRow headerRow = sheet.CreateRow(0);
        ICell headerCell;
        ICell cell = null;
        Dictionary<String, ICellStyle> styles = CreateExcelStyles(hssfwb);

        //handling value
        int rowIdx = 1;
        foreach (DataRow row in sourceTable.Rows)
        {
            IRow dataRow = sheet.CreateRow(rowIdx);            
            foreach (DataColumn column in sourceTable.Columns)
            {
                cell = dataRow.CreateCell(column.Ordinal);                
                cell.SetCellValue(row[column].ToString());
                cell.CellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("");
                cell.CellStyle = styles["cell"]; 
            }            
            rowIdx++;
        }

        //handling header
        foreach (DataColumn column in sourceTable.Columns)
        {
            headerCell = headerRow.CreateCell(column.Ordinal);
            headerCell.SetCellValue(column.ColumnName);
            headerCell.CellStyle = styles["header"];
            sheet.AutoSizeColumn(column.Ordinal);
            sheet.SetColumnWidth(column.Ordinal, (sheet.GetColumnWidth(column.Ordinal) + (5 * 256))); // set width = autofit() + (5 * 256)
        }
        return rowIdx;
    }

Sheet1 では、vlookup 式を使用して、Sheet2 から「日曜日」と「土曜日」を取得します。しかし、シート 2 の週、日曜、および土曜の値が文字列 (左揃えセル) のように見えるため、機能しません。データをExcelに生成するときに日付にセル形式を設定する方法は? これに対する解決策を教えてください。

ありがとう。

4

1 に答える 1

24

最初の問題はこの行です

cell.SetCellValue(row[column].ToString());

値を文字列に変換していますが、おそらくそれを DateTime 形式に変換しているため、NPOI はこれが datetime であることを認識しています。

またはこれが機能するかどうか試してください:

cell.SetCellValue(DateTime.Now);

次に、最初にセルのスタイルを設定してから DataFormat 属性を変更してみてください。ただし、次のようなカスタム形式を使用します。

IDataFormat dataFormatCustom = workbook.CreateDataFormat();
cell.CellStyle = styles["cell"]; 
cell.CellStyle.DataFormat = dataFormatCustom.GetFormat("yyyyMMdd HH:mm:ss");

これにより、DateTime 値が人間が読める形式にフォーマットされます。

于 2014-01-30T14:47:21.180 に答える