隨筆02.datatable數據寫入excel,再將excel轉.CSV

163 阅读2分钟

如果你的 Excel 文件有一个模板,且你需要从指定的单元格(例如 B4)开始写入数据,可以按以下步骤操作:

  1. 将数据写入到模板中的 Excel 文件
  2. 将写入数据后的 Excel 文件另存为 .CSV 格式

以下是相应的 VB.NET 代码示例:

步骤 1: 将数据写入到模板中的 Excel 文件

vb
复制代码
Imports Microsoft.Office.Interop.Excel
Imports System.Runtime.InteropServices

Public Shared Sub WriteDataTableToExcelTemplate(table As DataTable, templatePath As String, excelPath As String)
    Dim excelApp As Application = Nothing
    Dim workbook As Workbook = Nothing
    Dim worksheet As Worksheet = Nothing

    Try
        ' 初始化 Excel 应用程序
        excelApp = New Application()
        ' 打开模板文件
        workbook = excelApp.Workbooks.Open(templatePath)
        worksheet = workbook.Sheets(1) ' 获取第一个工作表

        ' 获取起始写入位置的单元格
        Dim startCell As Range = worksheet.Range("B4")
        Dim startRow As Integer = startCell.Row
        Dim startColumn As Integer = startCell.Column

        ' 写入数据
        Dim rowIndex As Integer = startRow
        For Each row As DataRow In table.Rows
            Dim colIndex As Integer = startColumn
            For Each item In row.ItemArray
                ' 将数据写入单元格
                worksheet.Cells(rowIndex, colIndex).Value = item.ToString()
                colIndex += 1
            Next
            rowIndex += 1
        Next

        ' 保存 Excel 文件
        workbook.SaveAs(excelPath)
        workbook.Close()

        ' 退出 Excel 应用程序
        excelApp.Quit()
    Catch ex As Exception
        Throw
    Finally
        ' 释放资源
        If workbook IsNot Nothing Then Marshal.ReleaseComObject(workbook)
        If excelApp IsNot Nothing Then Marshal.ReleaseComObject(excelApp)
    End Try
End Sub

步骤 2: 将 Excel 文件另存为 .CSV 格式

vb
复制代码
Public Shared Sub ConvertExcelToCsv(excelPath As String, csvPath As String)
    Dim excelApp As Application = Nothing
    Dim workbook As Workbook = Nothing

    Try
        ' 初始化 Excel 应用程序
        excelApp = New Application()
        ' 打开 Excel 文件
        workbook = excelApp.Workbooks.Open(excelPath)

        ' 保存为 CSV 格式
        workbook.SaveAs(csvPath, XlFileFormat.xlCSV)

        ' 关闭工作簿
        workbook.Close()

        ' 退出 Excel 应用程序
        excelApp.Quit()
    Catch ex As Exception
        Throw
    Finally
        ' 释放资源
        If workbook IsNot Nothing Then Marshal.ReleaseComObject(workbook)
        If excelApp IsNot Nothing Then Marshal.ReleaseComObject(excelApp)
    End Try
End Sub

完整示例

vb
复制代码
Public Shared Sub ExportDataTableToCsvFromTemplate(table As DataTable, templatePath As String, excelPath As String, csvPath As String)
    ' 将 DataTable 写入到模板中的 Excel 文件
    WriteDataTableToExcelTemplate(table, templatePath, excelPath)
    
    ' 将 Excel 文件另存为 CSV 格式
    ConvertExcelToCsv(excelPath, csvPath)
End Sub

调用示例:

vb
复制代码
Dim dataTable As DataTable = GetDataTable() ' 获取你的 DataTable 数据
Dim templatePath As String = "C:\path\to\template.xlsx"
Dim excelPath As String = "C:\path\to\tempFile.xlsx"
Dim csvPath As String = "C:\path\to\output.csv"

ExportDataTableToCsvFromTemplate(dataTable, templatePath, excelPath, csvPath)

代码说明:

  1. WriteDataTableToExcelTemplate:将 DataTable 写入到指定的模板文件中,从指定的单元格开始。
  2. ConvertExcelToCsv:将新的 Excel 文件保存为 CSV 格式。
  3. ExportDataTableToCsvFromTemplate:将两个步骤结合在一起,先将数据写入 Excel 模板,再转换为 CSV。

这样,你可以确保从 Excel 模板中的指定位置开始写入数据,并最终生成所需的 CSV 文件。