Exemple #1
0
 def finish(self):
     # add two new sheets at the end
     self.normalization_sheet = self.wtbook.add_sheet(
         normalization_sheet_name)
     self.provenance_sheet = self.wtbook.add_sheet(
         provenance_sheet_name)
     XLWTWriter.finish(self)
Exemple #2
0
 def finish(self):
     # add two new sheets at the end if we're adding normalization and results
     if add_provenance_sheet:
         self.normalization_sheet = self.wtbook.add_sheet(
             normalization_sheet_name)
         self.wtbook.add_sheet(provenance_sheet_name)
     XLWTWriter.finish(self)
Exemple #3
0
 def sheet(self, rdsheet, wtsheet_name):
     # if we're just adding a normalization sheet, add it before the provenance sheet
     if (not add_provenance_sheet) and (wtsheet_name
                                        == provenance_sheet_name):
         self.normalization_sheet = self.wtbook.add_sheet(
             normalization_sheet_name)
     # write the sheet as requested
     XLWTWriter.sheet(self, rdsheet, wtsheet_name)
Exemple #4
0
def create_input_file2():
    wtbook = XLWTWriter()
    wtsheet = wtbook.add_sheet(u'First')
    colours = 'white black red green blue pink turquoise yellow'.split()
    fancy_styles = [xlwt.easyxf(
        'font: name Times New Roman, italic on;'
        'pattern: pattern solid, fore_colour %s;'
         % colour) for colour in colours]
    for rowx in xrange(8):
        wtsheet.write(rowx, 0, rowx)
        wtsheet.write(rowx, 1, colours[rowx], fancy_styles[rowx])
    wtbook.save(u'C:/D4/test_folder/Mẫu BBBG 2018_nana.xls')  
Exemple #5
0
def copy2(wb):
    w = XLWTWriter()
    process(
        XLRDReader(wb,'unknown.xls'),
        w
        )
    return w.output[0][1], w.style_list
Exemple #6
0
 def OpenExcel(self, sPath):
     self.__rd = xlrd.open_workbook(sPath, formatting_info=True);
     w = XLWTWriter();
     process(XLRDReader(self.__rd, 'unknown.xls'), w);
     self.__wt = w.output[0][1];
     self.__style_list = w.style_list;
     self.__path=sPath;
     return self;
Exemple #7
0
def getStyle1(workbook, sheet, t1, t2):
    w = XLWTWriter()
    process(XLRDReader(workbook, 'unknown.xls'), w)
    s = w.style_list
    xl_sheet1 = workbook.sheet_by_name(sheet)

    styles = s[xl_sheet1.cell_xf_index(t1, t2)]
    return styles
Exemple #8
0
    def _copy2(self, wb):
        '''
        附带样式的copy
        xlrd打开文件,必须加参数formatting_info=True
        '''

        w = XLWTWriter()
        process(XLRDReader(wb, 'unknown.xls'), w)
        return w.output[0][1], w.style_list
Exemple #9
0
def copy(wb):
    """
    Copy an :class:`xlrd.Book` into an :class:`xlwt.Workbook` preserving as much
    information from the source object as possible.

    See the :doc:`copy` documentation for an example.
    """
    w = XLWTWriter()
    process(XLRDReader(wb, 'unknown.xls'), w)
    return w.output[0][1]
Exemple #10
0
    def __init__(self, ffile, *args, **kwargs):
        """
        """

        self.workbook = xlrd.open_workbook(ffile.file, formatting_info=True)

        self.xlwt_writer = XLWTWriter()
        self.xlwt_writer.start()
        self.xlwt_writer.workbook(self.workbook, '%s.xls' % uuid4())

        self.sheets = self._sheet_list()

        if self.sheets:
            pass
            # self.init_active_sheet()
        else:
            raise SheetNotFoundException('Sheets not found')

        for k, v in kwargs.items():
            setattr(self, k, v)
Exemple #11
0
 def open_workbook(self, filename):
     wb = xlrd.open_workbook(filename,
                             formatting_info=True,
                             on_demand=True,
                             encoding_override='utf-8')
     w = XLWTWriter()
     process(XLRDReader(wb, "unknown.xls"), w)
     self.in_book = wb
     self.out_book = w.output[0][1]
     self.style_list = w.style_list
     return self
Exemple #12
0
    def __init__(self, ffile, *args, **kwargs):
        """
        """

        self.workbook = xlrd.open_workbook(ffile.file, formatting_info=True)

        self.xlwt_writer = XLWTWriter()
        self.xlwt_writer.start()
        self.xlwt_writer.workbook(self.workbook, '%s.xls'%uuid4())

        self.sheets = self._sheet_list()

        if self.sheets:
            pass
            # self.init_active_sheet()
        else:
            raise SheetNotFoundException('Sheets not found')

        for k, v in kwargs.items():
            setattr(self, k, v)
Exemple #13
0
def new_xls_with_template_style(filename):
    """
    使用某xls文件内的格式创建新的单元格
    :param filename:
    :return:
    """
    rb = xlrd.open_workbook(filename, formatting_info=True)
    rs = rb.sheet_by_index(0)

    # 获取要从模板文件中获得的样式
    writer = XLWTWriter()
    process(XLRDReader(rb, 'nothing.xls'),
            writer)  # 'noting.xls'为任意命名,实际不会产生影响
    title_style = writer.style_list[rs.cell_xf_index(0, 0)]  # 第一行一列单元格格式
    content_style = writer.style_list[rs.cell_xf_index(1, 0)]  # 第二行一列单元格格式
    content_style.num_format_str = 'YYYY/MM/DD'  # 防止日期格式丢失,特意设置格式

    new_b = copy(rb)
    new_s = new_b.get_sheet(0)

    nrows = 10
    ncols = 12
    for row_index in range(nrows):
        style = content_style
        cell_index = datetime.date.today()
        if row_index == 0:
            style = title_style
            cell_index = '标题'
        for col_index in range(ncols):
            if isinstance(cell_index, str):
                new_s.write(row_index, col_index, cell_index, style)
            else:
                new_s.write(row_index, col_index,
                            cell_index + datetime.timedelta(days=1), style)
    new_file = os.path.join(os.path.dirname(filename),
                            'from_template_style.xls')
    new_b.save(new_file)
Exemple #14
0
def copy2(rb):
    wf = XLWTWriter()
    process(XLRDReader(rb, 'foo.xls'), wf)
    return wf.output[0][0], wf.style_list
Exemple #15
0
class Workbook(object):
    def __init__(self, ffile, *args, **kwargs):
        """
        """

        self.workbook = xlrd.open_workbook(ffile.file, formatting_info=True)

        self.xlwt_writer = XLWTWriter()
        self.xlwt_writer.start()
        self.xlwt_writer.workbook(self.workbook, '%s.xls' % uuid4())

        self.sheets = self._sheet_list()

        if self.sheets:
            pass
            # self.init_active_sheet()
        else:
            raise SheetNotFoundException('Sheets not found')

        for k, v in kwargs.items():
            setattr(self, k, v)

    def init_active_sheet(self):
        """
         инициализация активного листа
        :result: None
        """
        self._active_sheet = self.sheets[0]
        self.xlwt_writer.sheet(self._active_sheet.sheet,
                               self._active_sheet.sheet.name)

    def configure_writer(self):
        """
        Настройка конфигураций writer-а
        """

        if hasattr(self, 'fit_num_pages'):
            self.xlwt_writer.wtsheet.fit_num_pages = self.fit_num_pages

        if hasattr(self, 'portrait_orientation'):
            self.xlwt_writer.wtsheet.portrait = self.portrait_orientation

        if hasattr(self, 'fit_width_to_pages'):
            self.xlwt_writer.wtsheet.fit_width_to_pages = self.fit_width_to_pages

        if hasattr(self, 'fit_height_to_pages'):
            self.xlwt_writer.wtsheet.fit_height_to_pages = self.fit_height_to_pages
        else:
            # По-умолчанию, указываем значение 0, для того, чтобы не запихивать огромный отчет на одну страницу.
            self.xlwt_writer.wtsheet.fit_height_to_pages = 0

        if hasattr(self, 'header_str'):
            self.xlwt_writer.wtsheet.header_str = self.header_str
        else:
            #
            self.xlwt_writer.wtsheet.header_str = (u'')

        if hasattr(self, 'footer_str'):
            self.xlwt_writer.wtsheet.footer_str = self.footer_str
        else:
            #
            self.xlwt_writer.wtsheet.footer_str = (u'&P из &N')

    def get_section(self, name):
        """
         Получение секции по имени
        :param name: имя секции
        :result: секция
        """
        if not hasattr(self, '_active_sheet'):
            self._active_sheet = self.sheets[0]
            self.xlwt_writer.sheet(self._active_sheet.sheet,
                                   self._active_sheet.sheet.name)
        return self._active_sheet.get_section(name)

    def get_sections(self):
        """
         Получение всех секций
        :result: словарь с секциями
        """

        workbook_sections = {}

        for sheet in self.sheets:
            workbook_sections.update(sheet.get_sections())

        return workbook_sections

    @property
    def active_sheet(self):
        return self._active_sheet

    @active_sheet.setter
    def active_sheet(self, value):
        assert isinstance(value, int)
        try:
            self._active_sheet = self.sheets[value]
        except IndexError:
            raise SheetNotFoundException('Sheet not found')

        try:
            self.xlwt_writer.sheet(self._active_sheet.sheet,
                                   self.get_sheet_name())
            # Проставляем номер листа в выходном документе.
            # Для этого берём номер соответствующего узла из шаблона и прибавляем 1, т.к.
            # нумерация с нуля.
            self.xlwt_writer.wtsheet.start_page_number = self.xlwt_writer.rdsheet.number + 1
            # Настраиваем writer для работы с новым листом.
            self.configure_writer()
        except ValueError:
            return

    def _sheet_list(self):
        all_sheets = self.workbook._sheet_list

        sheet_list = []
        for sheet in all_sheets:
            sheet_list.append(WorkbookSheet(sheet, self.xlwt_writer))

        return sheet_list

    def get_sheet_name(self):
        return self.active_sheet.get_name()

    def build(self, dest_file):
        """
         Сборка книги
        :param dest_file: выходной путь
        :result: None
        """

        self.configure_writer()

        dest_file_name = dest_file.file

        self.xlwt_writer.finish()

        # Получаем формат файла
        dest_file_format = dest_file_name.split('.')[-1]

        # Если не xls, то проставляем явно.
        if dest_file_format != FileConverter.XLS:
            dest_file_name = '%s.%s' % (dest_file_name, FileConverter.XLS)

        # self.xlwt_writer.output имеет вид
        # [('выходной файл1', Workbook1), ('выходной файл2', Workbook2), ... ]
        # Для данного Workbook выбираем первый кортеж
        ouput_file, workbook = self.xlwt_writer.output[0]
        workbook.save(dest_file_name)

    def write_sheet_count(self):
        """
        Подсчитываем количество листов в которых есть секции
        (другими словами в них будет производиться запись)
        """

        # Берём листы из шаблона
        read_sheets = self.xlwt_writer.rdbook._sheet_list

        return len([
            read_sheet for read_sheet in read_sheets
            if read_sheet.cell_note_map
        ])
 def finish(self):
     # add two new sheets at the end
     self.normalization_sheet = self.wtbook.add_sheet(normalization_sheet_name)
     self.provenance_sheet = self.wtbook.add_sheet(provenance_sheet_name)
     XLWTWriter.finish(self)
 def sheet(self, rdsheet, wtsheet_name):
     XLWTWriter.sheet(self, rdsheet, wtsheet_name)
 def finish(self):
     # add two new sheets at the end if we're adding normalization and results
     if add_provenance_sheet:
         self.normalization_sheet = self.wtbook.add_sheet(normalization_sheet_name)
         self.wtbook.add_sheet(provenance_sheet_name)
     XLWTWriter.finish(self)
 def sheet(self, rdsheet, wtsheet_name):
     # if we're just adding a normalization sheet, add it before the provenance sheet
     if (not add_provenance_sheet) and (wtsheet_name == provenance_sheet_name):
         self.normalization_sheet = self.wtbook.add_sheet(normalization_sheet_name)
     # write the sheet as requested
     XLWTWriter.sheet(self, rdsheet, wtsheet_name)
 def setUp(self):
     self.w = XLWTWriter()
class TestXLWTWriter(TestCase):

    def setUp(self):
        self.w = XLWTWriter()
        
    def test_inheritance(self):
        self.failUnless(isinstance(self.w,BaseWriter))

    def test_no_files(self):
        r = GlobReader(os.path.join(test_files,'*not.xls'))
        r(self.w)
        compare(self.w.output,[])
        
    def test_one_file(self):
        r = GlobReader(os.path.join(test_files,'test.xls'))
        r(self.w)
        compare(self.w.output,[
            ('test.xls',C('xlwt.Workbook'))
            ])
        # make sure wtbook is deleted
        compare(self.w.wtbook,None)
        
    def test_multiple_files(self):
        r = GlobReader(os.path.join(test_files,'*.xls'))
        r(self.w)
        compare(self.w.output,[
            ('test.xls',C('xlwt.Workbook')),
            ('testall.xls',C('xlwt.Workbook')),
            ('testnoformatting.xls',C('xlwt.Workbook')),
            ])
        
    def test_multiple_files_same_name(self):
        r = TestReader(
            ('Sheet1',[['S1R0C0']]),
            )
        book = tuple(r.get_workbooks())[0][0]
        self.w.start()
        self.w.workbook(book,'new.xls')
        self.w.sheet(book.sheet_by_index(0),'new1')
        self.w.cell(0,0,0,0)
        self.w.workbook(book,'new.xls')
        self.w.sheet(book.sheet_by_index(0),'new2')
        self.w.cell(0,0,0,0)
        self.w.finish()
        compare(self.w.output,[
            ('new.xls',C('xlwt.Workbook')),
            ('new.xls',C('xlwt.Workbook')),
            ])
        compare(self.w.output[0][1].get_sheet(0).name,
                'new1')
        compare(self.w.output[1][1].get_sheet(0).name,
                'new2')
Exemple #22
0
class Workbook(object):

    def __init__(self, ffile, *args, **kwargs):
        """
        """

        self.workbook = xlrd.open_workbook(ffile.file, formatting_info=True)

        self.xlwt_writer = XLWTWriter()
        self.xlwt_writer.start()
        self.xlwt_writer.workbook(self.workbook, '%s.xls'%uuid4())

        self.sheets = self._sheet_list()

        if self.sheets:
            pass
            # self.init_active_sheet()
        else:
            raise SheetNotFoundException('Sheets not found')

        for k, v in kwargs.items():
            setattr(self, k, v)

    def init_active_sheet(self):
        """
         инициализация активного листа
        :result: None
        """
        self._active_sheet = self.sheets[0]
        self.xlwt_writer.sheet(self._active_sheet.sheet, self._active_sheet.sheet.name)

    def configure_writer(self):
        """
        Настройка конфигураций writer-а
        """

        if hasattr(self, 'fit_num_pages'):
            self.xlwt_writer.wtsheet.fit_num_pages = self.fit_num_pages

        if hasattr(self, 'portrait_orientation'):
            self.xlwt_writer.wtsheet.portrait = self.portrait_orientation

        if hasattr(self, 'fit_width_to_pages'):
            self.xlwt_writer.wtsheet.fit_width_to_pages = self.fit_width_to_pages

        if hasattr(self, 'fit_height_to_pages'):
            self.xlwt_writer.wtsheet.fit_height_to_pages = self.fit_height_to_pages
        else:
            # По-умолчанию, указываем значение 0, для того, чтобы не запихивать огромный отчет на одну страницу.
            self.xlwt_writer.wtsheet.fit_height_to_pages = 0

        if hasattr(self, 'header_str'):
            self.xlwt_writer.wtsheet.header_str = self.header_str
        else:
            #
            self.xlwt_writer.wtsheet.header_str = (u'')

        if hasattr(self, 'footer_str'):
            self.xlwt_writer.wtsheet.footer_str = self.footer_str
        else:
            #
            self.xlwt_writer.wtsheet.footer_str = (u'&P из &N')

    def get_section(self, name):
        """
         Получение секции по имени
        :param name: имя секции
        :result: секция
        """
        if not hasattr(self, '_active_sheet'):
            self._active_sheet = self.sheets[0]
            self.xlwt_writer.sheet(self._active_sheet.sheet, self._active_sheet.sheet.name)
        return self._active_sheet.get_section(name)

    def get_sections(self):
        """
         Получение всех секций
        :result: словарь с секциями
        """

        workbook_sections = {}

        for sheet in self.sheets:
            workbook_sections.update(sheet.get_sections())

        return workbook_sections

    @property
    def active_sheet(self):
        return self._active_sheet

    @active_sheet.setter
    def active_sheet(self, value):
        assert isinstance(value, int)
        try:
            self._active_sheet = self.sheets[value]
        except IndexError:
            raise SheetNotFoundException('Sheet not found')

        try:
            self.xlwt_writer.sheet(self._active_sheet.sheet, self.get_sheet_name())
            # Проставляем номер листа в выходном документе.
            # Для этого берём номер соответствующего узла из шаблона и прибавляем 1, т.к.
            # нумерация с нуля.
            self.xlwt_writer.wtsheet.start_page_number = self.xlwt_writer.rdsheet.number + 1
            # Настраиваем writer для работы с новым листом.
            self.configure_writer()
        except ValueError:
            return

    def _sheet_list(self):
        all_sheets = self.workbook._sheet_list

        sheet_list = []
        for sheet in all_sheets:
            sheet_list.append(WorkbookSheet(sheet, self.xlwt_writer))

        return sheet_list

    def get_sheet_name(self):
        return self.active_sheet.get_name()

    def build(self, dest_file):
        """
         Сборка книги
        :param dest_file: выходной путь
        :result: None
        """

        self.configure_writer()

        dest_file_name = dest_file.file

        self.xlwt_writer.finish()

        # Получаем формат файла
        dest_file_format = dest_file_name.split('.')[-1]

        # Если не xls, то проставляем явно.
        if dest_file_format != FileConverter.XLS:
            dest_file_name = '%s.%s' % (dest_file_name, FileConverter.XLS)

        # self.xlwt_writer.output имеет вид
        # [('выходной файл1', Workbook1), ('выходной файл2', Workbook2), ... ]
        # Для данного Workbook выбираем первый кортеж
        ouput_file, workbook = self.xlwt_writer.output[0]
        workbook.save(dest_file_name)

    def write_sheet_count(self):
        """
        Подсчитываем количество листов в которых есть секции
        (другими словами в них будет производиться запись)
        """

        # Берём листы из шаблона
        read_sheets = self.xlwt_writer.rdbook._sheet_list

        return len([read_sheet for read_sheet in read_sheets if read_sheet.cell_note_map])
Exemple #23
0
import xlrd
from xlutils.filter import process, XLRDReader, XLWTWriter
 
rb = xlrd.open_workbook('test.xls', formatting_info=True)
table = rb.sheets()[0]
print(table.cell(9,2))
# 参考xlutils.copy库内的用法 参考xlutils.filter内的参数定义style_list
w = XLWTWriter()

process(XLRDReader(rb, 'unknown.xls'), w)
wb = w.output[0][1]
style_list = w.style_list

for n, sheet in enumerate(rb.sheets()):
    print('n:'+str(n));
    print('sheet:'+str(sheet));
    sheet2 = wb.get_sheet(n)
    for r in range(sheet.nrows):
        for c, cell in enumerate(sheet.row_values(r)):
            style = style_list[sheet.cell_xf_index(r, c)]
            if table.cell(r,c) == 66:
                sheet2.write(r, c, 'no problem sir', style)
wb.save('save.xls')
print("done")
Exemple #24
0
 def sheet(self, rdsheet, wtsheet_name):
     XLWTWriter.sheet(self, rdsheet, wtsheet_name)
Exemple #25
0
 def __copy_style(wb):
     w = XLWTWriter()
     process(XLRDReader(wb, 'unknown.xls'), w)
     return w.style_list