2017-10-18 14 views
9

Chúng tôi đang cố gắng tạo bảng điều khiển Excel mặc định mà người dùng của chúng tôi có thể tải xuống. Khi tải xuống trang tính Excel, chúng tôi muốn điền một trang tính vào tệp với dữ liệu của chúng.Không thể lưu trang tính Excel sau khi thêm dữ liệu nếu sổ làm việc chứa bảng Pivot

Chúng tôi đang sử dụng EPPlus để thao tác trên trang tính Excel.

Nói tóm lại, cấu trúc của bảng như sau:

  1. Sheet A với các yếu tố báo cáo (các bảng tổng hợp, biểu đồ trục và Slicer)
  2. Sheet B đó chứa toàn bộ dữ liệu thiết
  3. Một tên phạm vi được xác định là =OFFSET(Data!$A$1;0;0;COUNTA(Data!$A:$A);COUNTA(Data!$1:$1)) chỉ đơn giản là điều chỉnh theo kích thước của tập dữ liệu mà chúng tôi chèn vào bảng đó
  4. Bất kể phạm vi được đặt tên chứa i được tải vào Power Query và được thêm vào sổ làm việc Mô hình dữ liệu
  5. Tất cả các yếu tố báo cáo từ Sheet A được cấu hình để tải dữ liệu từ Data Model

Nhìn chung, đây hoạt động tuyệt vời miễn là chúng ta đang tự nhồi Sheet B với dữ liệu của chúng tôi. Khi chúng ta cố gắng sử dụng EPPlus cho điền vào các dữ liệu chúng tôi nhận được một lỗi khi cố gắng để lưu các tập tin:

The cachesource is not a worksheet 

Bằng cách thử và sai, chúng tôi đã lột xác tờ đó là phần để cô lập các nguyên nhân của vấn đề . Chúng tôi nghi ngờ rằng nó có thể là slicer, việc sử dụng Power Query/Data Model hoặc thủ thuật với phạm vi được đặt tên. Tuy nhiên, không có vấn đề nào trong số này có vẻ là vấn đề - nếu chúng tôi xóa tất cả các Bảng tổng hợp khỏi trang tính thì chúng tôi có thể lưu sổ làm việc tốt. Đáng ngạc nhiên với tôi, chúng tôi có thể sử dụng Bảng xếp hạng Pivot tốt, chỉ có các bảng đang gây ra sự cố.

Bất kỳ đề xuất nào về cách tránh sự cố này với EPPlus? Hiện tại, chúng tôi đã tiếp tục mà không cần sử dụng Bảng tổng hợp, chúng tôi sẽ muốn họ quay trở lại tại một số thời điểm :)

+1

Dựa trên https://github.com/pruiz/EPPlus/blob/master/EPPlus/Table/PivotTable/ExcelPivotCacheDefinition.cs (và thông báo lỗi) bạn đã thử sử dụng cachesource làm trang tính chưa? – mjwills

+0

Thành thật mà nói, tôi không có ý tưởng nhỏ nhất có nghĩa là gì hoặc làm thế nào để làm điều đó :) –

+0

@mjwills Tôi đã googled xung quanh một chút và tìm thấy một số thủ thuật để vô hiệu hóa bộ đệm Pivot Table. Tôi không thể tìm thấy bất kỳ điều gì liên quan đến việc thay đổi loại bộ nhớ cache ở bất cứ đâu. Bí quyết cần phải bỏ qua "Lưu dữ liệu nguồn có tệp" nhưng tùy chọn đó dường như có màu xám trong trường hợp của chúng tôi khi Bảng Pivot đang tải từ Mô hình Dữ liệu. –

Trả lời

1

Lỗi - "The cachesource is not a worksheet" có thể là do nhận dạng dữ liệu nguồn trong phạm vi của Excel dưới dạng phạm vi bảng tính.

Bạn có thể thay đổi dữ liệu đã bán trong phạm vi thành Bảng B dưới dạng bảng, sử dụng ws.ListObjects.Add. Bất cứ khi nào bảng tổng hợp được làm mới, nó sẽ tự động lấy tất cả dữ liệu trong bảng.

Vui lòng kiểm tra một giải pháp thay thế khác có sẵn từ câu hỏi liên quan -Xác định bảng thay vì phạm vi là PivotTable 'cacheSource', nếu điều đó có ích.

+0

Cảm ơn phản hồi của bạn @IITC Tôi có thể giúp bạn xây dựng một chút về "Bạn có thể thay đổi dữ liệu đã bị xóa trong phạm vi thành Bảng B [...]" Tôi không chắc chắn tôi có hoàn toàn theo dõi bạn hay không. Về việc thay đổi nguồn bộ nhớ cache, tôi không nghĩ rằng điều đó có thể xảy ra với thiết lập của tôi. Như đã đề cập trong một trong những nhận xét của tôi ở trên, tôi đang sử dụng Power Query và OLAP Cube/Data Model để kết nối tất cả các biểu đồ và bảng tổng hợp. Điều này dường như giới hạn các tùy chọn của tôi một cách đáng kể. –

0

Có rất nhiều issues related with cache khi thao tác dữ liệu Pivot. Khi tôi đã xem nó cho this other bounty here.

Phải giống với EPPlus. Bạn phải xử lý bộ đệm ẩn dữ liệu Pivot theo cách thủ công, như được thực hiện here.

Và ở đây, chàng trai tặng complete solution for handling filters with EPPlus.

Hy vọng điều đó sẽ hữu ích.

+0

Cảm ơn bạn đã phản hồi của bạn J. Chomel, hãy để tôi có một cái nhìn tại các liên kết bạn cung cấp và điều tra chúng một chút. –

Các vấn đề liên quan