方法1: 直接在写入数据的时候替换,格式化后再设置到表格中
使用方法: 直接再将数据写入数据格的时候先调用该方法,用于将数据格式化
Imports System.Windows.Forms
Imports System.Data
Imports Microsoft.Data.SqlClient
Imports Microsoft.Office.Interop.Excel
''' <summary>
''' 全角スペースを半角に変換
''' 複数のスペースも半角に変換されます
''' 英字を半角に変換し、その他の文字はそのまま
''' </summary>
''' <param name="input"></param>
''' <returns></returns>
Public Shared Function ConvertToHalfWidth(input As String) As String
' 入力が全て空白の場合、空文字列を返します
If String.IsNullOrWhiteSpace(input.Replace(" ", " ")) Then
Return ""
End If
Dim sb As New System.Text.StringBuilder()
Dim previousWasSpace As Boolean = False
For Each c As Char In StrConv(input, VbStrConv.Wide)
Dim code As Integer = AscW(c)
' 現在の文字が全角スペースか半角スペースかを確認します
If code = 12288 OrElse code = 32 Then
' 前の文字がスペースでない場合は半角スペースを追加
If Not previousWasSpace Then
sb.Append(ChrW(32))
previousWasSpace = True
End If
ElseIf (code >= 65281 AndAlso code <= 65374) Then
' 全角英文字および数字を半角に変換
If (code >= 65313 AndAlso code <= 65338) OrElse (code >= 65345 AndAlso code <= 65370) OrElse (code >= 65296 AndAlso code <= 65305) Then
sb.Append(ChrW(code - 65248))
Else
sb.Append(c)
End If
previousWasSpace = False
Else
sb.Append(c)
previousWasSpace = False
End If
Next
' 結果が一つのスペースのみの場合、空文字列を返します
Dim result As String = sb.ToString().Trim()
If result = " " Then
Return ""
End If
Return result
End Function
End Class
方法2 将数据完成写入表格后,再将表格中所有数据遍历格式化,最后保存到excel文件
Imports System.Windows.Forms
Imports System.Data
Imports Microsoft.Data.SqlClient
Imports Microsoft.Office.Interop.Excel
' シート単位で書き込み这个是将数据写到工作表的操作,最后工作表会写满数据,但是没有真正保存到excel文件中
writingReport(writeSheet, tempSheet)
Template.setBreakePage(writeSheet)
'ワークシート内のテキストを変換する
ProcessSheet(writeSheet)
'最后将数据写入excel表
writeBook.SaveAs(outputPath)
''' <summary>
''' ワークシートを処理する
''' データを処理する前にワークシート内のすべてのテキストを変換します
''' </summary>
''' <param name="sheet"></param>
Public Shared Sub ProcessSheet(sheet As Worksheet)
Dim usedRange As Range = sheet.UsedRange
For Each cell As Range In usedRange
If cell.Value IsNot Nothing AndAlso TypeOf cell.Value Is String Then
cell.Value = ConvertToHalfWidth(cell.Value.ToString())
End If
Next
End Sub
''' 全角スペースを半角に変換
''' 複数のスペースも半角に変換されます
''' 英字を半角に変換し、その他の文字はそのまま
Public Shared Function ConvertToHalfWidth(text As String) As String
Dim sb As New System.Text.StringBuilder()
Dim previousWasSpace As Boolean = False
For Each c As Char In StrConv(text, VbStrConv.Wide)
Dim code As Integer = AscW(c)
' 現在の文字が全角スペースか半角スペースかを確認します
If code = 12288 OrElse code = 32 Then
' 前の文字がスペースでない場合は半角スペースを追加
If Not previousWasSpace Then
sb.Append(ChrW(32))
previousWasSpace = True
End If
ElseIf (code >= 65281 AndAlso code <= 65374) Then
' 全角英文字および数字を半角に変換
If (code >= 65313 AndAlso code <= 65338) OrElse (code >= 65345 AndAlso code <= 65370) OrElse (code >= 65296 AndAlso code <= 65305) Then
sb.Append(ChrW(code - 65248))
Else
sb.Append(c)
End If
previousWasSpace = False
Else
sb.Append(c)
previousWasSpace = False
End If
Next
Return sb.ToString()
End Function