2
    DataTable dt = TypeConveriontHelper.ConvretExcelToDataTable(SourceAppFilePath);

    string targetPath = BatchFolderPath + @"\" + "TRANSACT.INX";
    StreamWriter wrtr = null;
    wrtr = new StreamWriter(targetPath);
    for (int x = 0; x < dt.Rows.Count; x++)
    {
        string rowString = "";
        for (int y = 0; y < dt.Columns.Count; y++)
        {
            if (y == dt.Columns.Count - 1)
            {
                rowString += "\"" + dt.Rows[x][y].ToString() + "\"";
            }
            else
            {
                rowString += "\"" + dt.Rows[x][y].ToString() + "\"~";
            }
        }           
        rowString = rowString.Replace("\"", String.Empty).Trim();
        wrtr.WriteLine(rowString);

    }
    wrtr.Close();
    wrtr.Dispose();

Datatableは、日付とともに時刻を含む「日付」列を返します。ただし、日付のみを表示する必要があります。解決策を教えてください。ありがとう。

4

3 に答える 3

1
rowString += "\"" + DateTime.Parse(dt.Rows[x][y]).ToString("dd/MM/yyyy") + "\"";

または次のように完全に実装されています。

DataTable dt = TypeConveriontHelper.ConvretExcelToDataTable(SourceAppFilePath);

        string targetPath = BatchFolderPath + @"\" + "TRANSACT.INX";
        StreamWriter wrtr = null;
        wrtr = new StreamWriter(targetPath);
        for (int x = 0; x < dt.Rows.Count; x++)
        {
            string rowString = "";
            for (int y = 0; y < dt.Columns.Count; y++)
            {
                string dateTimeString = dt.Rows[x][y].ToString();
                DateTime dateTime;

                if (DateTime.TryParse(dateTimeString, out dateTime))
                {
                    string formattedDate = dateTime.ToString("dd/MM/yyyy");

                    if (y == dt.Columns.Count - 1)
                    {
                        rowString += "\"" + formattedDate + "\"";
                    }
                    else
                    {
                        rowString += "\"" + formattedDate + "\"~";
                    }
                }
            }
            rowString = rowString.Replace("\"", String.Empty).Trim();
            wrtr.WriteLine(rowString);

        }
        wrtr.Close();
        wrtr.Dispose();

ミケーレが言ったように、完全なリファレンスについてはhttp://msdn.microsoft.com/en-us/library/az4se3k1.aspxを参照してください

于 2012-10-05T08:21:42.060 に答える
1
DateTime dateAndTime = DateTime.Parse(string);
DateTime dateOnly = dateAndTime.Date;

またはDateTime.ToShortDateString

String dateString = dateAndTime.ToShortDateString();

またはカスタムの日付と時刻の形式

dateAndTime.ToString("MMMM dd, yyyy");

あなたのコードのために:

    StringBuilder rowString = new StringBuilder();
    int dateTimeColumn = 3;
    for (int y = 0; y < dt.Columns.Count; y++)
    {
        string cellValue = dt.Rows[x][y].ToString();
        if(y == dateTimeColumn)
        {
            DateTime dateAndTime = DateTime.Parse(cellValue);
            cellValue = dateAndTime.ToShortDateString();
        }
        rowString.Append(cellValue);
        if (y != dt.Columns.Count - 1)
        {
            rowString.Append("~");
        }
    }
    wrtr.WriteLine(rowString.ToString());  
于 2012-10-05T08:16:16.853 に答える
0

内の型に関係なくこれDataTableを行いました。コードを大幅に短縮したため、LINQ でも行いました。セパレータを挿入したかどうかを判断できませんでした。そうでない場合は、単に@"\"string.empty またはスペースに置き換えます。基本的には、列の値を出力用の 1 つの文字列に結合するだけです。

これが私が使用したものです:

  var dt = new DataTable();
  dt.Columns.Add("SomeDateField");
  dt.Columns.Add("OtherField");
  dt.Columns.Add("AnotherOtherField");
  dt.Rows.Add(DateTime.Now, "Test", "Test");

  var rowStrings = dt.Rows.Cast<DataRow>().Select(x => String.Join(@"\", dt.Columns.Cast<DataColumn>().Select(y =>
  {
    DateTime dateOut = new DateTime();
    if (DateTime.TryParse(x[y.ColumnName].ToString(), out dateOut))
      return dateOut.ToShortDateString();
    else
      return x[y.ColumnName];
  }).ToArray())).ToList();

列の値を文字列に解析できる場合は、文字列の "ToShortDate" を使用します。

ライターも手動で破棄する代わりに、「Using」を使用する傾向があり、例外があっても破棄を呼び出します。

  using (StreamWriter wrtr = new StreamWriter(""))
  {
    foreach (string rowString in rowStrings)
    {
      wrtr.WriteLine(rowString);
    }
  }
于 2012-10-05T09:04:31.450 に答える