如何把excel中的多行数据按行数拆分成多个

原创链接 知乎 郭大牛 谢谢!解决了问题仅此记录一下
https://zhuanlan.zhihu.com/p/81580481?from_voters_page=true

首先打开一个excel 添加宏
在这里插入图片描述

将代码编辑到宏中

Sub copybat()
    Dim i, j, k, m, r As Integer
    Dim n, total_data As Long
    Dim path As String
    Dim title_area, data_column, data_areas As Range
   
    Set title_area = Application.InputBox(prompt:="请用鼠标选择表头及表标题所在区域", Title:="选择", Type:=8) '选取表头区域
    Set data_column = Application.InputBox(prompt:="请鼠标选择需要拆分数据的开始行区域", Title:="选择", Type:=8) '选取拆分起始处
    m = data_column.Row      '获取分割开始行所在区域行号
    r = data_column.Column   '获取分割开始行所在区域列号
    j = data_column.Columns.Count   '获取分割开始行区域列数
    i = Application.InputBox(prompt:="请输入每次分割数据条目数", Title:="选择")
  
   '获取需要分割的数据总条数。这里,可以用两种办法获取到数据区域的尾部行号
      '第一种,使用传统的:End(xlDown).Row,优点是速度快,缺点是有空白行时会出错
      '第二种,使用查找方式find,优点是基本不会出错,缺点是条数较多时候可能会慢一点
   'total_data = Cells(data_column(1, 1)).End(xlDown).Row - m + 1
    total_data = Cells.Find("*", LookIn:=xlFormulas, SearchDirection:=xlPrevious).Row - m + 1
    If MsgBox("本次分割文件数据总数为:" & total_data & "条,将会被分割成" & WorksheetFunction.RoundUp(total_data / i, 0) & "个文件," _
                & "点击“确定”开始分割,点击“取消”返回", vbOKCancel, "确认") = vbOK Then
        Filename = Application.InputBox(prompt:="请输入分割后的文件主名,默认为“分割文件”", Title:="选择", Default:="分割文件")
        With Application.FileDialog(msoFileDialogFolderPicker)  '获取分割后的文件存储路径
            If .Show = False Then Exit Sub
                path = .SelectedItems(1) & "\" '加入"\",否则,文件会被存储到选定路径的上一层
        End With
        Application.ScreenUpdating = False
        k = 0   '第几次分割输出,用于标识分割文件次数
        For n = m To total_data Step i   '从开始分割的行往下计数
            Set data_areas = Range(Cells(n, r), Cells(n + i - 1, j))   '设置每次循环体内的分割数据主体
            Application.Union(title_area, data_areas).Select           '把表头区域以及本次循环体内的数据区域进行合并
            Selection.Copy
            Workbooks.Add
            Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
            , SkipBlanks:=False, Transpose:=False      '特殊粘贴:包含源格式的粘贴,以便保持所有格式一致
           k = k + 1
           ActiveWorkbook.SaveAs Filename:=path & Filename & "_" & k & ".xlsx", FileFormat:= _
            xlOpenXMLWorkbook, CreateBackup:=False      '按照既有的文件名、路径、循环次数合并起来存储文件
            ActiveWindow.Close
        Next n
        MsgBox "文件分割完毕!", vbDefaultButton1, "提示"
    End If
    Application.ScreenUpdating = True
End Sub

在这里插入图片描述
双击启动宏
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原创链接 知乎 郭大牛 谢谢!解决了问题仅此记录一下
https://zhuanlan.zhihu.com/p/81580481?from_voters_page=true
在这里插入图片描述

PHP Spreadsheet是一个强大的库,用于读取、操作Excel文件在PHP中。如果你想要将Excel表格中某一列的数据,特别是当包含长文本需要换行或分隔多行多列时,你可以利用它的`getActiveSheet()`方法获取活跃的工作表,然后通过`getCell()`找到特定单元格,接着利用`getActiveSheet()->getStyle($cell)->getWrapText()`设置单元格内容是否自动换行。 例如,假设你想把A列中的文本按照指定规则拆分新的行,可以这样做: ```php // 导入phpspreadsheet use PhpOffice\PhpSpreadsheet\Reader\Xlsx; use PhpOffice\PhpSpreadsheet\Worksheet\Cell; // 加载Excel文件 $reader = new Xlsx(); $spreadsheet = $reader->load('your_file.xlsx'); // 获取工作表 $worksheet = $spreadsheet->getActiveSheet(); // 假设你要处理的是A1单元格 $cellValue = $worksheet->getCell('A1')->getValue(); // 分割文本并添加到新位置,这里只是一个示例,你需要根据实际需求调整分割规则 $newRows = preg_split('/[\r\n]+/', $cellValue, -1, PREG_SPLIT_NO_EMPTY); // 使用正则表达式按行分割 // 遍历新的行数组 foreach ($newRows as $row) { // 确定新行的起始位置,比如从B2开始 $newRowColumn = 'B'; $newRowIndex = 2; // 或者根据当前已有数据动态增加 $newCell = $worksheet->getCell($newRowColumn . $newRowIndex); // 设置新单元格值,并可能设置样式 $newCell->setValue($row); // 如果需要,设置新单元格的换行风格 $newCellStyle = $worksheet->getStyle($newCell); $newCellStyle->applyFromArray(['wrapText' => true]); // 更新行数 $newRowIndex++; } // 保存修改后的Excel文件 $writer = \PhpOffice\PhpSpreadsheet\Writer\Xlsx::create($spreadsheet); $writer->save('output_file.xlsx'); ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yoo前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值