2016-09-14 13 views
-1

私はExcelのエクスポートのカスタムフォーマットを設定するのに苦労しています。 Excelに必要なカスタム日付形式はyyyy-mm-ddです。 私はすでにdatagridviewで日付形式を設定していますが、Excelには影響を与えません。 ExcelでVB.NETでxmlとdatagridviewを使用してExcelをエクスポートするときにカスタム日付形式を設定するにはどうすればよいですか?

Private Sub ExportToExcel(ByVal DGV As DataGridView) 

     Dim fs As New StreamWriter(filePathAndNameHome, False) 

     With fs 
      .WriteLine("<?xml version=""1.0""?>") 
      .WriteLine("<?mso-application progid=""Excel.Sheet""?>") 
      .WriteLine("<Workbook xmlns=""urn:schemas-microsoft-com:office:spreadsheet"">") 
      '... 
      .WriteLine(" </Styles>") 

      If DGV.Name = "Report" Then 
       .WriteLine(" <Worksheet ss:Name=""Report"">") 'SET NAMA SHEET 
       .WriteLine("  <Table>") 
       'Columns 
       '... 
      End If 

      'AUTO SET HEADER 
      .WriteLine("   <Row ss:StyleID=""ksg"">") 
      For i As Integer = 0 To DGV.Columns.Count - 1 'SET HEADER 
       Application.DoEvents() 
       .WriteLine("   <Cell ss:StyleID=""hdr"">") 
       .WriteLine("    <Data ss:Type=""String"">{0}</Data>", DGV.Columns.Item(i).HeaderText) 
       .WriteLine("   </Cell>") 
      Next 
      'The row 
      .WriteLine("   </Row>") 
      For intRow As Integer = 0 To DGV.RowCount - 1 
       Application.DoEvents() 
       .WriteLine("  <Row ss:StyleID=""ksg"" ss:utoFitHeight =""0"">") 

       For intCol As Integer = 0 To DGV.Columns.Count - 1 
        Application.DoEvents() 
        .WriteLine("  <Cell ss:StyleID=""isi"">") 
        .WriteLine("   <Data ss:Type=""String"">{0}</Data>", DGV.Item(intCol, intRow).Value) 'How to change its date format 
        .WriteLine("  </Cell>") 
       Next 
       .WriteLine("  </Row>") 
      Next 
      .WriteLine("  </Table>") 
      .WriteLine(" </Worksheet>") 
      .WriteLine("</Workbook>") 
      .Close() 
     End With 
    End Sub 
+0

あなたは[タグ:C#の]でこれをタグ付けされた任意の理由:あなたは列番号を決定したら

は、あなただけのように条件を追加する必要がありますか? – DavidG

+0

@DavidGは広いネットをキャストします。 – Plutonix

+1

@Plutonix PHPまたはJavascriptにタグを付けてください。 – DavidG

答えて

0

あなたはyyyy-mm-ddにセルA1のカスタムフォーマットを変更し、VBA即時ウィンドウで?[a1].value(11)を入力した場合、あなたはこの取得:

<?xml version="1.0"?> 
<?mso-application progid="Excel.Sheet"?> 
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
xmlns:o="urn:schemas-microsoft-com:office:office" 
xmlns:x="urn:schemas-microsoft-com:office:excel" 
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
xmlns:html="http://www.w3.org/TR/REC-html40"> 
<Styles> 
    <Style ss:ID="Default" ss:Name="Normal"> 
    <Alignment ss:Vertical="Bottom"/> 
    <Borders/> 
    <Font ss:FontName="Arial" x:Family="Swiss" ss:Color="#000000"/> 
    <Interior/> 
    <NumberFormat/> 
    <Protection/> 
    </Style> 
    <Style ss:ID="s62"> 
    <NumberFormat ss:Format="yyyy\-mm\-dd"/> 
    </Style> 
</Styles> 
<Worksheet ss:Name="Sheet1"> 
    <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1"> 
    <Column ss:Width="53.25"/> 
    <Row> 
    <Cell ss:StyleID="s62"> 
    <Data ss:Type="DateTime">1899-12-31T00:00:00.000</Data> 
    </Cell> 
    </Row> 
    </Table> 
</Worksheet> 
</Workbook> 

をそうDateTimess:Typeを変更し、 isiスタイル定義に数値書式を追加する

<Style ss:ID="isi"> 
    <NumberFormat ss:Format="yyyy\-mm\-dd"/> 
    </Style> 
+0

forループでどのように適用するのですか? –

+0

@GuideMe '.WriteLine(" <データss:タイプ= "" DateTime ""> {0} "、DGV.Item(intCol、intRow).Value)のようなもの。 – Slai

+0

エクスポートされたExcelファイルを開くことができません。私は不明なエラーがあります。 –

0

Custを設定するにはom形式をExcelで使用するには、まず、日付が配置または挿入されている列番号を判別する必要があります。

For intCol As Integer = 0 To DGV.Columns.Count - 1 
     Application.DoEvents() 
     .WriteLine("  <Cell ss:StyleID=""isi"">") 
      If intCol = 7 Or intCol = 12 Or intCol = 14 Or intCol = 15 Then 'if column 7 or ... has date set custom format 
       .WriteLine("   <Data ss:Type=""String"">{0}</Data>", Format(DGV.Item(intCol, intRow).Value, "yyyy-MM-dd").ToString()) 
      Else 
       .WriteLine("   <Data ss:Type=""String"">{0}</Data>", DGV.Item(intCol, intRow).Value) 
      End If 
     .WriteLine("  </Cell>") 
    Next 
関連する問題