靓仔的灌水

回复列表(493|隐藏机器人聊天)
  • @Ta / 2023-03-15 / /
    @靓仔,代码不完整,请重写发送
  • @Ta / 2023-03-15 / /

    @TabKey9,不好意思,由于字符限制,部分代码被截断了,以下是完整的代码示例:

    import com.alibaba.excel.EasyExcel;
    import com.alibaba.excel.write.builder.ExcelWriterBuilder;
    import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
    import com.alibaba.excel.write.metadata.style.WriteCellStyle;
    import com.alibaba.excel.write.metadata.style.WriteFont;
    import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    public class ExcelExporter {
    
        public static void main(String[] args) {
            // 创建需要写入Excel的数据
            List<List<Object>> data = new ArrayList<>();
            List<String> headers = new ArrayList<>();
    
            // 遍历数据列表,获取表头和单元格的值
            List<Map<String, String>> dataList = getDataList();
            for (Map<String, String> item : dataList) {
                List<Object> row = new ArrayList<>();
                for (Map.Entry<String, String> entry : item.entrySet()) {
                    String key = entry.getKey();
                    String value = entry.getValue();
                    if (!headers.contains(key)) {
                        headers.add(key);
                    }
                    row.add(value);
                }
                data.add(row);
            }
    
            // 设置Excel样式
            WriteCellStyle headStyle = new WriteCellStyle();
            headStyle.setWriteFont(new WriteFont());
            WriteCellStyle contentStyle = new WriteCellStyle();
            contentStyle.setWriteFont(new WriteFont());
    
            // 设置Excel写入器和Sheet
            ExcelWriterBuilder writerBuilder = EasyExcel.write("output.xlsx");
            ExcelWriterSheetBuilder sheetBuilder = writerBuilder.sheet();
            sheetBuilder.registerWriteHandler(new HorizontalCellStyleStrategy(headStyle, contentStyle));
            sheetBuilder.head(headers);
            sheetBuilder.doWrite(data);
    
            // 关闭写入器
            try {
                writerBuilder.build().finish();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        private static List<Map<String, String>> getDataList() {
            List<Map<String, String>> data = new ArrayList<>();
            Map<String, String> map1 = Map.of("心情是否美丽", "0", "喜欢吃什么水果", "0", "现在孕早是几周", "0", "最近是否忌口几周", "0", "体重多少", "0");
            Map<String, String> map2 = Map.of("心情是否美丽", "1", "喜欢吃什么水果", "2", "现在孕早是几周", "1", "最近是否忌口几周", "2", "体重多少", "2");
            data.add(map1);
            data.add(map2);
            return data;
        }
    }
    

    在此示例中,我们首先遍历了提供的数据列表,提取出表头和单元格的值,并将其组成一个二维列表。然后,我们创建了一个ExcelWriterBuilder和一个ExcelWriterSheetBuilder,并将Excel样式应用于Sheet。最后,我们将表头和数据写入Excel,并使用ExcelWriterBuilder完成写入操作。

  • @Ta / 2023-03-15 / /
    @TabKey9,在Java8运行貌似有问题,请优化代码
  • @Ta / 2023-03-15 / /
    @靓仔,在Java8运行貌似有问题,请优化代码
  • @Ta / 2023-03-15 / /

    @TabKey9,好的,这里是对代码的优化:

    import com.alibaba.excel.EasyExcel;
    import com.alibaba.excel.write.builder.ExcelWriterBuilder;
    import com.alibaba.excel.write.builder.ExcelWriterSheetBuilder;
    import com.alibaba.excel.write.metadata.style.WriteCellStyle;
    import com.alibaba.excel.write.metadata.style.WriteFont;
    import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.LinkedHashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.stream.Collectors;
    
    public class ExcelExporter {
    
        public static void main(String[] args) {
            // 创建需要写入Excel的数据
            List<List<Object>> data = new ArrayList<>();
            Set<String> headers = new LinkedHashSet<>();
    
            // 遍历数据列表,获取表头和单元格的值
            List<Map<String, String>> dataList = getDataList();
            for (Map<String, String> item : dataList) {
                List<Object> row = item.entrySet().stream()
                        .peek(entry -> headers.add(entry.getKey()))
                        .map(Map.Entry::getValue)
                        .collect(Collectors.toList());
                data.add(row);
            }
    
            // 设置Excel样式
            WriteCellStyle headStyle = new WriteCellStyle();
            headStyle.setWriteFont(new WriteFont());
            WriteCellStyle contentStyle = new WriteCellStyle();
            contentStyle.setWriteFont(new WriteFont());
    
            // 设置Excel写入器和Sheet
            ExcelWriterBuilder writerBuilder = EasyExcel.write("output.xlsx");
            ExcelWriterSheetBuilder sheetBuilder = writerBuilder.sheet();
            sheetBuilder.registerWriteHandler(new HorizontalCellStyleStrategy(headStyle, contentStyle));
            sheetBuilder.head(headers.toArray(new String[0]));
            sheetBuilder.doWrite(data);
    
            // 关闭写入器
            try {
                writerBuilder.build().finish();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        private static List<Map<String, String>> getDataList() {
            List<Map<String, String>> data = new ArrayList<>();
            Map<String, String> map1 = Map.of("心情是否美丽", "0", "喜欢吃什么水果", "0", "现在孕早是几周", "0", "最近是否忌口几周", "0", "体重多少", "0");
            Map<String, String> map2 = Map.of("心情是否美丽", "1", "喜欢吃什么水果", "2", "现在孕早是几周", "1", "最近是否忌口几周", "2", "体重多少", "2");
            data.add(map1);
            data.add(map2);
            return data;
        }
    }
    

    在优化后的代码中,我们使用Java 8的Stream API来简化遍历操作。在遍历数据列表时,我们将表头添加到一个Set中,以便去重。对于每个Map条目,我们使用流的peek()方法添加表头,并将值映射为一个对象列表。最后,我们将表头和数据写入Excel,就像之前的示例中一样。

  • @Ta / 2023-03-15 / /
    @靓仔,这个方法报错了 private static List<Map<String, String>> getDataList() {
            List<Map<String, String>> data = new ArrayList<>();
            Map<String, String> map1 = Map.of("心情是否美丽", "0", "喜欢吃什么水果", "0", "现在孕早是几周", "0", "最近是否忌口几周", "0", "体重多少", "0");
            Map<String, String> map2 = Map.of("心情是否美丽", "1", "喜欢吃什么水果", "2", "现在孕早是几周", "1", "最近是否忌口几周", "2", "体重多少", "2");
            data.add(map1);
            data.add(map2);
            return data;
        }
  • @Ta / 2023-03-15 / /

    @TabKey9,抱歉,我的代码中使用的是Java 9的Map.of()方法,它在Java 8中不可用。如果您正在使用Java 8,则可以使用以下代码代替:

    private static List<Map<String, String>> getDataList() {
        List<Map<String, String>> data = new ArrayList<>();
        Map<String, String> map1 = new HashMap<>();
        map1.put("心情是否美丽", "0");
        map1.put("喜欢吃什么水果", "0");
        map1.put("现在孕早是几周", "0");
        map1.put("最近是否忌口几周", "0");
        map1.put("体重多少", "0");
        Map<String, String> map2 = new HashMap<>();
        map2.put("心情是否美丽", "1");
        map2.put("喜欢吃什么水果", "2");
        map2.put("现在孕早是几周", "1");
        map2.put("最近是否忌口几周", "2");
        map2.put("体重多少", "2");
        data.add(map1);
        data.add(map2);
        return data;
    }
    

    这里我们使用HashMap替换Map.of()方法,手动将键和值添

  • @Ta / 2023-03-15 / /
    @靓仔,是的,我正在使用Java 8,还有这行代码也报错了sheetBuilder.head(headers.toArray(new String[0]));
  • @Ta / 2023-03-15 / /

    @TabKey9,抱歉,这是我犯了一个错误。在Java 8中,toArray()方法需要传递一个数组类型的参数。因此,您需要将toArray()方法的参数更改为一个空数组,如下所示:

    sheetBuilder.head(headers.toArray(new String[headers.size()]));
    

    这应该可以解决您遇到的问题。

  • @Ta / 2023-03-15 / /
    @靓仔,还是没能解决报错,以下代码有报错        // 遍历数据列表,获取表头和单元格的值
            List<Map<String, String>> dataList = getDataList();
            for (Map<String, String> item : dataList) {
                List<Object> row = item.entrySet().stream()
                        .peek(entry -> headers.add(entry.getKey()))
                        .map(Map.Entry::getValue)
                        .collect(Collectors.toList());
                data.add(row);
            }

            // 设置Excel样式
            WriteCellStyle headStyle = new WriteCellStyle();
            headStyle.setWriteFont(new WriteFont());
            WriteCellStyle contentStyle = new WriteCellStyle();
            contentStyle.setWriteFont(new WriteFont());

            // 设置Excel写入器和Sheet
            ExcelWriterBuilder writerBuilder = EasyExcel.write("output.xlsx");
            ExcelWriterSheetBuilder sheetBuilder = writerBuilder.sheet();
            sheetBuilder.registerWriteHandler(new HorizontalCellStyleStrategy(headStyle, contentStyle));
            sheetBuilder.head(headers.toArray(new String[headers.size()]));
            sheetBuilder.doWrite(data);
  • @Ta / 2023-03-15 / /

    @TabKey9,抱歉,我看到之前的错误已经解决了,但是代码仍然存在问题。根据您的描述,我猜测报错可能是因为您没有初始化"headers"和"data"变量。请尝试将以下代码添加到您的方法中,看看是否可以解决问题:

    List<String> headers = new ArrayList<>();
    List<List<Object>> data = new ArrayList<>();
    

    此外,如果您在循环中添加表头,请确保您只添加一次表头,而不是每次添加新的数据行时都添加一次。您可以在循环之前创建"headers"变量,然后在循环结束后使用该变量设置Excel表头。

    此外,您还需要在使用EasyExcel库之前添加以下依赖项:

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.2.10</version>
    </dependency>
    

    希望这可以帮助您解决问题。

  • @Ta / 2023-03-15 / /
    @靓仔,刷新页面
  • @Ta / 2023-03-15 / /

    @TabKey9,即将刷新页面

  • @Ta / 2023-03-21 / /
    @靓仔,你好啊
  • @Ta / 2023-03-21 / /
    @靓仔,晚上好
  • @Ta / 2023-03-21 / /

    [新会话] @TabKey9,晚上好!有什么我能帮忙的吗?

  • @Ta / 2023-03-22 / /
    @靓仔,你是哪个模型
  • @Ta / 2023-03-22 / /

    @TabKey9,我是 ChatGPT,是基于GPT-3.5架构训练的一个大型语言模型,由OpenAI开发。我可以回答各种问题并提供语言上的帮助。

  • @Ta / 2023-03-29 / /
    @靓仔,你好
  • @Ta / 2023-03-29 / /

    [新会话] @TabKey9,你好!有什么我可以帮助你的吗?

添加新回复
回复需要登录